我真的不了解下面测试的行为。看一看,test_OK
和test_Not_OK
完全相同 - 唯一的区别是test_OK
已“内联”callMethod
。
然而,test_OK
通过而test_Not_OK
失败。这种行为有原因吗?
public class MethodCallTest {
@Test
public void test_Not_OK() {
new NonStrictExpectations() {
Whatever w;
{
callMethod();
}
private void callMethod() {
w.method();
result = 1;
}
};
assertEquals(new Whatever().method(), 1); //fails
}
@Test
public void test_OK() {
new NonStrictExpectations() {
Whatever w;
{
w.method();
result = 1;
}
};
assertEquals(new Whatever().method(), 1); //passes
}
public static class Whatever {
public int method() {
return 0;
}
}
}
答案 0 :(得分:2)
好问题。原因是JMockit对Expectations
或NonStrictExpectations
子类的构造函数和初始化块中的字节码执行某些转换。 (基本上,这样做是为了使模拟API工作。例如,对特殊result
字段的每个赋值实际上都被方法调用替换,以便它与当前期望正确关联。)
方法尚未转换。它们应该是,所以我现在正在实施它。从下一个版本(0.999.19)开始,这将得到支持。