Aquí está mi caso. Tengo una clase de AbstractController. Tiene un controlador de clase secundaria. En uno de los métodos de AbstractController, se crea una instancia de un nuevo ApplicationLock. Me gustaría burlar ApplicationLock cuando escribo ut para Controller. Escribí un caso de prueba como a continuación.Obtuvo ExceptionInInitializerError al burlarse del constructor de una clase con Powermock. ¿Como arreglarlo?
@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);
}
Agregué las anotaciones necesarias a la clase de prueba.
@RunWith (PowerMockRunner.class)
@PrepareForTest ({} AbstractController.class)
Pero tengo el siguiente error cuando se ejecuta este caso de prueba. Es un inicializador estático en AbstractController.
Causado por:. Java.lang.NullPointerException en com.acompany.controller.common.AbstractController (AbstractController.java:65)
private static final String DEFAULT_FOLDER = AbstractController.class.getProtectionDomain().getCodeSource()
.getLocation().getPath();
seguimiento de la pila completa es como sigue.
java.lang.ExceptionInInitializerError en java.lang.Class.forName0 (Nativo Método) en Java.Lang.Class.forName (Class.java:169) en javassist.runtime.Desc.getClassObject (Desc.java:44) en javassist.runtime.Desc.getClassType (Desc.java:153) en javassist.runtime.Desc.getType (Desc.java:123) en javassist.runtime.Desc.getType (Desc. java: 79) al com.acompany.controller.portfolio.ControllerTest.testIncrementalFail (ControllerTest.java:195) en sun.reflect.NativeMethodAccessorImpl.invoke0 (nativo Método) en sun.reflect.NativeMethodAccessorImpl. invocar (NativeMethodAccessorImpl.java:39) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) en java.lang.reflect.Method.invoke (Method.java:597) en org.junit.internal .runners.TestMethod.invoke (TestMethod.java:66) en org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runTestMethod (PowerMockJUnit44RunnerDelegateImpl.java:307) en org.junit.internal.runners. MethodRoadie $ 2.run (MethodRoadie.java:86) en org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters (MethodRoadie.java:94) en org.powermock.modules.junit4.internal.impl.PowerMockJUn it44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.executeTest (PowerMockJUnit44RunnerDelegateImpl.java:294) en org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTestInSuper (PowerMockJUnit47RunnerDelegateImpl.java:112) en org.powermock.modules.junit4. internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTest (PowerMockJUnit47RunnerDelegateImpl.java:73) en org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters (PowerMockJUnit44RunnerDelegateImpl.java:282) en org.junit. internal.runners.MethodRoadie.runTest (MethodRoadie.java:84) a t org.junit.internal.runners.MethodRoadie.run (MethodRoadie.java:49) en org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod (PowerMockJUnit44RunnerDelegateImpl.java:207) en org.powermock.modules.junit4.internal.impl. PowerMockJUnit44RunnerDelegateImpl.runMethods (PowerMockJUnit44RunnerDelegateImpl.java:146) en org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ 1.run (PowerMockJUnit44RunnerDelegateImpl.java:120) en org.junit.internal.runners.ClassRoadie.runUnprotected (ClassRoadie.java:34) en org.junit.internal.runners.ClassRoadie.runProtected (ClassRoadie.java:44) en o g.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run (PowerMockJUnit44RunnerDelegateImpl.java:118) en org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run (JUnit4TestSuiteChunkerImpl.java:102) en org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run (AbstractCommonPowerMockRunner.java:53) en org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:49) en org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) en org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) en org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) en org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) en org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197) Causado por: java.lang.NullPointerException en com.acompany.controller.common.AbstractController. (AbstractController.java: 65) ... 35 más
Gracias. Lo intenté Pero no puedo suprimir todos los inicializadores estáticos en AbstractController. Obtendré un puntero nulo si lo hago. – Smartmarkey
@Smartmarkey Se me ocurrió otra idea. – MaDa