使用Mockito和PowerMockito的测试类的静态成员的模拟方法

时间:2018-07-15 17:45:57

标签: java unit-testing junit mockito powermockito

我正在尝试模拟测试类的静态成员的方法。它提供了一个测试用例的预期输出,但是如果我尝试模拟该静态成员的相同方法或其他方法,则不会获得预期的输出。

这里是一个例子:

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方法的范围只是一个测试用例。有什么方法可以模拟来自不同测试用例的静态成员的方法?

0 个答案:

没有答案