Ecco il mio caso. Ho una classe AbstractController. Ha un controller sottoclasse. In uno dei metodi di AbstractController viene istanziato un nuovo ApplicationLock. Mi piacerebbe prendere in giro ApplicationLock scrivendo ut per Controller. Ho scritto un caso di test come di seguito.Ottenuto ExceptionInInitializerError durante il mocking del costruttore di una classe con Powermock. Come sistemarlo?
@test
public void testMethod(){
ApplicationLock mockLock=PowerMockito.mock(ApplicationLock.class);
PowerMockito.when(mockLock.tryObtain()).thenReturn(true);
PowerMockito.whenNew(ApplicationLock.class).withArguments(argThat(new IsFile()),anyString()).thenReturn(mockLock);
}
ho aggiunto le annotazioni necessarie per la classe di test.
@RunWith (PowerMockRunner.class)
@PrepareForTest ({} AbstractController.class)
Ma ho ottenuto il seguente errore durante l'esecuzione di questo tipo di test. Questo è un inizializzatore statico in AbstractController.
causato da:. Java.lang.NullPointerException a com.acompany.controller.common.AbstractController (AbstractController.java:65)
private static final String DEFAULT_FOLDER = AbstractController.class.getProtectionDomain().getCodeSource()
.getLocation().getPath();
pila completa traccia è come sotto.
java.lang.ExceptionInInitializerError a java.lang.Class.forName0 (metodo natale) a java.lang.Class.forName (Class.java:169) a javassist.runtime.Desc.getClassObject (Desc.java:44) a javassist.runtime.Desc.getClassType (Desc.java:153) a javassist.runtime.Desc.getType (Desc.java:123) a javassist.runtime.Desc.getType (Desc. java: 79) a com.acompany.controller.portfolio.ControllerTest.testIncrementalFail (ControllerTest.java:195) a sun.reflect.NativeMethodAccessorImpl.invoke0 (metodo natale) a sun.reflect.NativeMethodAccessorImpl. richiamare (NativeMethodAccessorImpl.java:39) a sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) a java.lang.reflect.Method.invoke (Method.java:597) a org.junit.internal .runners.TestMethod.invoke (TestMethod.java:66) a org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runTestMethod (PowerMockJUnit44RunnerDelegateImpl.java:307) a org.junit.internal.runners. MethodRoadie $ 2.run (MethodRoadie.java:86) a org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters (MethodRoadie.java:94) a org.powermock.modules.junit4.internal.impl.PowerMockJUn it44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.executeTest (PowerMockJUnit44RunnerDelegateImpl.java:294) a org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTestInSuper (PowerMockJUnit47RunnerDelegateImpl.java:112) a org.powermock.modules.junit4. internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTest (PowerMockJUnit47RunnerDelegateImpl.java:73) a org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters (PowerMockJUnit44RunnerDelegateImpl.java:282) a org.junit. internal.runners.MethodRoadie.runTest (MethodRoadie.java:84) a t org.junit.internal.runners.MethodRoadie.run (MethodRoadie.java:49) a org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod (PowerMockJUnit44RunnerDelegateImpl.java:207) a org.powermock.modules.junit4.internal.impl. PowerMockJUnit44RunnerDelegateImpl.runMethods (PowerMockJUnit44RunnerDelegateImpl.java:146) a org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ 1.run (PowerMockJUnit44RunnerDelegateImpl.java:120) a org.junit.internal.runners.ClassRoadie.runUnprotected (ClassRoadie.java:34) a org.junit.internal.runners.ClassRoadie.runProtected (ClassRoadie.java:44) a o g.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run (PowerMockJUnit44RunnerDelegateImpl.java:118) a org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run (JUnit4TestSuiteChunkerImpl.java:102) a org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run (AbstractCommonPowerMockRunner.java:53) a org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:49) a org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) a org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) a org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) a org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) Causato da: java.lang.NullPointerException a com.acompany.controller.common.AbstractController. 65) ... more 35
Grazie. L'ho provato Ma non posso sopprimere tutti gli inizializzatori statici in AbstractController. Otterrò il puntatore nullo se lo faccio. – Smartmarkey
@ Smartmarkey Un'altra idea mi è venuta in mente. – MaDa