记录从实例初始化程序调用的方法中的期望值

时间:2012-11-02 17:19:57

标签: java jmockit expectations

我真的不了解下面测试的行为。看一看,test_OKtest_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;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

好问题。原因是JMockit对ExpectationsNonStrictExpectations子类的构造函数和初始化块中的字节码执行某些转换。 (基本上,这样做是为了使模拟API工作。例如,对特殊result字段的每个赋值实际上都被方法调用替换,以便它与当前期望正确关联。)

然而,期望块中的

方法尚未转换。它们应该是,所以我现在正在实施它。从下一个版本(0.999.19)开始,这将得到支持。