我想测试ClassToTest
类的方法methodToTest
。但我无法将其作为anotherMethod
调用的私有方法methodToTest
与单例类SingletonClass
使用其公共方法{{}返回的值有一些依赖关系。 1}}。
我尝试使用powermock的privateMethod模拟和静态方法模拟和所有,但没有帮助 有没有人有这种情况的解决方案?
getName
答案 0 :(得分:0)
使用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");
//...
}
}
答案 1 :(得分:0)
您应该可以使用部分模拟来处理这种情况。听起来您想要创建对象的实例,但您只想查看对象是否调用anotherMethod()方法而不实际执行其他方法中的任何逻辑。如果我理解正确,以下内容应该可以实现您的目标。
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToTest.class})
public class ClassToTestTest {
@Test
public void testMethodToTest() {
ClassToTest mockInstance =
PowerMock.createPartialMock(SingletonClass.class,"anotherMethod");
PowerMock.expectPrivate(mockInstance, "anotherMethod");
PowerMock.replay(mockInstance);
mockInstance.methodToTest();
PowerMock.verify(mockInstance);
}
}