我想测试ClassToTest类的方法methodToTest。但是我无法使用它,因为anotherMethod调用的私有方法methodToTest与使用其公共方法SingletonClass的单例类getName返回的值具有一定的依赖性。

我尝试使用powermock的privateMethod模拟和静态方法模拟以及所有方法,但没有帮助。
有人针对这种情况有解决方案吗?

Class ClassToTest{
    public void methodToTest(){
        ...
        anotherMethod();
        ...
    }

    private void anotherMethod(){
        SingletonClass singletonObj = SingletonClass.getInstance();
        String name = singletonObj.getName();
        ...
    }
}

最佳答案

使用mockStatic(请参阅http://code.google.com/p/powermock/wiki/MockitoUsage13#Mocking_Static_Method

@RunWith(PowerMockRunner.class)
@PrepareForTest({SingletonClass.class})
public class ClassToTestTest {
    @Test
    public void testMethodToTest() {
        SingletonClass mockInstance = PowerMockito.mock(SingletonClass.class);
        PowerMockito.mockStatic(SingletonClass.class);
        PowerMockito.when(SingletonClass.getInstance()).thenReturn(mockInstance);
        PowerMockito.when(mockInstance.getName()).thenReturn("MOCK NAME");

        //...
    }
}

08-28 22:53