2

我不太了解下面测试的行为。看着它,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;
        }
    }
}
4

1 回答 1

2

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

然而,期望块中的方法尚未转换。他们应该是,所以我现在正在实施它。从下一个版本 (0.999.19) 开始,将支持此功能。

于 2012-11-05T11:27:07.917 回答