我正在尝试模拟测试类的静态成员的方法。它提供了一个测试用例的预期输出,但是如果我尝试模拟该静态成员的相同方法或其他方法,则不会获得预期的输出。
这里是一个例子:
ClassToBeTested.java:
public class ClassToBeTested {
static private memberObj = SomeClass.SomeMethod();
public static void normalMethod1() {
System.out.println(memberObj.someMethod1());
}
public static void normalMethod2() {
System.out.println(memberObj.someMethod2());
}
}
TestClass.java:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeTested.class, SomeClass.class})
public class TestClass {
@Before
public void init() {
ClassOfMemberObj mockedMemberObject = Mockito.mock(ClassOfMemberObj.class);
PowerMockito.mockStatic(SomeClass.class);
PowerMockito.when(SomeClass.someMethod()).thenReturn(mockedMemberObject);
}
@Test
public void testMethod1() {
PowerMockito.when(mockedMemberObject.someMethod1()).thenReturn(21);
ClassToBeTested.normalMethod1();
}
@Test
public void testMethod2() {
PowerMockito.when(mockedMemberObject.someMethod1()).thenReturn(40);
ClassToBeTested.normalMethod1();
}
@Test
public void testMethod3() {
PowerMockito.when(mockedMemberObject.someMethod2()).thenReturn(20);
ClassToBeTested.normalMethod2();
}
}
在逐个运行每个测试用例时,在控制台上我分别获得了21、40和20的价值。但是,如果我运行TestClass,则会在控制台上得到以下值。
21
21
null
似乎静态成员的Mocking方法的范围只是一个测试用例。有什么方法可以模拟来自不同测试用例的静态成员的方法?