在java中的私有方法下模拟外部调用

时间:2013-01-24 23:44:47

标签: java mocking powermock private-methods

我想测试ClassToTest类的方法methodToTest。但我无法将其作为anotherMethod调用的私有方法methodToTest与单例类SingletonClass使用其公共方法{{}返回的值有一些依赖关系。 1}}。

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

getName

2 个答案:

答案 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);
    }
}