I am using Mockito + PowerMock to write a simple unit test for the following singleton class:
public class MyService {
private static MyService service;
private List<School> schoolList;
private MyService(){
// test case error complains here!
School school = new School();
schoolList.add(school);
}
public static Singleton getInstance( ) {
return service;
}
protected static void printSchool( ) {
School school = schoolList.get(0);
print(school);
}
}
My Test case:
@RunWith(PowerMockRunner.class)
public class MyServiceTest {
@PrepareForTest({MyService.class})
@Test
public void testPrintSchool() {
// enable mock static function
PowerMockito.mockStatic(MyService.class);
MyService mockService = PowerMockito.mock(MyService.class);
PowerMockito.when(MyService.getInstance())
.thenReturn(mockService);
}
}
I run my test, but got the following error:
java.lang.RuntimeException: Invoking the beforeTestMethod method on PowerMock test listener org.powermock.api.extension.listener.AnnotationEnabler@3ab19451 failed.
at com.xyz.MyService.<init>(MyService.java:12)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.mockito.internal.util.reflection.FieldInitializer$ParameterizedConstructorInstantiator.instantiate(FieldInitializer.java:257)
at org.mockito.internal.util.reflection.FieldInitializer.acquireFieldInstance(FieldInitializer.java:124)
at org.mockito.internal.util.reflection.FieldInitializer.initialize(FieldInitializer.java:86)
at org.mockito.internal.configuration.injection.ConstructorInjection.processInjection(ConstructorInjection.java:52)
...
As you can see, the error complains about MyService.java:12
line 12, that is the line School school = new School();
in MyService
constructor.
Why I get this error, how to get rid of it?
Aucun commentaire:
Enregistrer un commentaire