我想测试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");
//...
}
}