Oto moja sprawa. Mam klasę AbstractController. Ma kontroler podklasy. W jednej z metod programu AbstractController tworzona jest nowa instancja ApplicationLock. Chciałbym kpić z ApplicationLock podczas pisania ut dla kontrolera. Napisałem testowy przykład jak poniżej.Wystąpił wyjątek ExceptionInInitializerError podczas kpiny z klasy klasy Powermock. Jak to naprawić?
@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);
}
Dodałem niezbędne adnotacje do klasy testowej.
@RunWith (PowerMockRunner.class)
@PrepareForTest ({AbstractController.class})
Ale mam następujący błąd podczas uruchamiania tej sprawy testowej. To jest statyczny inicjator w AbstractController.
Spowodowane. Java.lang.NullPointerException w com.acompany.controller.common.AbstractController (AbstractController.java:65)
private static final String DEFAULT_FOLDER = AbstractController.class.getProtectionDomain().getCodeSource()
.getLocation().getPath();
całego stosu śladowy, jak poniżej.
java.lang.ExceptionInInitializerError na java.lang.Class.forName0 (metoda podstawowa) na java.lang.Class.forName (Class.java:169) w javassist.runtime.Desc.getClassObject (Desc.java:44) pod javassist.runtime.Desc.getClassType (Desc.java:153) pod javassist.runtime.Desc.getType (Desc.java:123) pod javassist.runtime.Desc.getType (Opis. java: 79) at com.acompany.controller.portfolio.ControllerTest.testIncrementalFail (ControllerTest.java:195) w sun.reflect.NativeMethodAccessorImpl.invoke0 (Metoda macierzysta) pod adresem sun.reflect.NativeMethodAccessorImpl. wywołania (NativeMethodAccessorImpl.java:39) w sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) w java.lang.reflect.Method.invoke (Method.java:597) w org.junit.internal .runners.TestMethod.invoke (TestMethod.java:66) w org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runTestMethod (PowerMockJUnit44RunnerDelegateImpl.java:307) w org.junit.internal.runners. MethodRoadie $ 2.run (MethodRoadie.java:86) na org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters (MethodRoadie.java:94) na org.powermock.modules.junit4.internal.impl.PowerMockJUn it44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.executeTest (PowerMockJUnit44RunnerDelegateImpl.java:294) na org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTestInSuper (PowerMockJUnit47RunnerDelegateImpl.java:112) w org.powermock.modules.junit4. internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTest (PowerMockJUnit47RunnerDelegateImpl.java:73) na org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters (PowerMockJUnit44RunnerDelegateImpl.java:282) w org.junit. internal.runners.MethodRoadie.runTest (MethodRoadie.java:84) a t org.junit.internal.runners.MethodRoadie.run (MethodRoadie.java:49) w org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod (PowerMockJUnit44RunnerDelegateImpl.java:207) w org.powermock.modules.junit4.internal.impl. PowerMockJUnit44RunnerDelegateImpl.runMethods (PowerMockJUnit44RunnerDelegateImpl.java:146) na org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ 1.run (PowerMockJUnit44RunnerDelegateImpl.java:120) w org.junit.internal.runners.ClassRoadie.runUnprotected (ClassRoadie.java:34) pod adresem org.junit.internal.runners.ClassRoadie.runProtected (ClassRoadie.java:44) pod lub g.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run (PowerMockJUnit44RunnerDelegateImpl.java:118) w org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run (JUnit4TestSuiteChunkerImpl.java:102) w org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run (AbstractCommonPowerMockRunner.java:53) w org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:49) w org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) w org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) w org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) w org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) pod adresem org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197) Spowodowane przez: java.lang.NullPointerException pod adresem com.acompany.controller.common.AbstractController. (AbstractController.java: 65) ... 35 więcej
Dzięki. Próbowałem tego. Ale nie mogę ukryć wszystkich statycznych inicjalizatorów w AbstractController. Jeśli to zrobię, otrzymam wskaźnik zerowy. – Smartmarkey
@Smartmarkey Przyszedł mi do głowy kolejny pomysł. – MaDa