【发布时间】:2014-10-02 20:05:15
【问题描述】:
任何人都可以建议是否可以使用期望/验证来测试私有方法被称为正确的次数/正确的参数。
被测类已被模拟 - 覆盖了一个私有方法。
正在测试一个调用多个私有方法的公共方法。
我想知道是否可以验证对公共方法执行时将调用的其他私有方法的调用?
对被测代码/类的一些想法;
public class UnderTest {
public void methodPublic(arg 1){
.....
methodPrivate1(var1);
....
methodPrivate2(var2);
}
private void methodPrivate1(var1){
//do stuff
}
private void methodPrivate2(var1){
//do stuff
}
}
在我的测试用例中
@Test
public void stateBasedTestMethod()
{
UnderTest underTest;
new MockUp<UnderTest>() {
@Mock(invocations = 1)
private void methodPrivate2(var1) {
//do nothing in the mocked case
}
};
underTest = new UnderTest();
underTest.methodPublic(arg1);
new Verifications() {{
// Is there a way to test that methodPrivate1 has been called-once/with-expected-arguments
}};
}
根据 Rogério 的回答进行了编辑。 我正在使用 jmockit 1.12 并且验证失败,因为使用提供的解决方案的方法调用该方法两次,正如我从 JMockit 文档中所想的那样。
故障跟踪; mockit.internal.UnexpectedInvocation:预计恰好 1 次调用 MyHelperTest$1#method3...,但被调用了 2 次strong>
包括我为此使用的完整代码。 如上所述 - 我的目标是模拟一种不做任何事情的私有方法。 并确保我可以验证另一个私有方法只被调用一次。
提前致谢,如果 Jmockit 可以做到这一点,希望能更好地理解。
测试代码。
public class MyHelperTest {
@Test
public void testHelper(@Mocked final MyDependent myDependent) {
final MyHelper myHelper;
new MockUp<MyHelper>() {
@Mock(invocations = 1)
private void method3(MyDependent myTable) {
System.out.println("In Mocked Method");
//do nothing in the mocked case
}
};
myHelper = new MyHelper();
myHelper.method1(myDependent);
new Verifications() {{
invoke(myHelper, "method2", myDependent); times = 1;
}};
}
}
正在测试的类。
public class MyHelper {
public void method1(MyDependent myDependent){
method2(myDependent);
}
private void method2(MyDependent myDependent) {
myDependent.setValue(1);
method3(myDependent);
}
private void method3(MyDependent myDependent) {
myDependent.setValue(2);
}
}
依赖类
public class MyDependent {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
【问题讨论】:
标签: jmockit