JMockit:验证测试对象的自我方法调用

时间:2017-02-01 07:00:48

标签: java unit-testing jmockit

我有以下课程,我需要编写单元测试。我需要自己验证MyClass自己方法的调用。

public class MyClass {
    public void init() {
    }

    public void testMethod() {
    }
}

我写了以下测试类来测试MyClass

public class MyClassTest {
    @Tested
    MyClass myClass;

    @Test
    public void initTest() {
//        new Expectations(myClass) {{
//        }};
        myClass.init();
        new Verifications() {{
            myClass.testMethod();
        }};
    }
}

可以看出,init()并未调用testMethod(),但令我惊讶的是,上述测试用例成功。

如果我通过取消注释上面的空myClass块来部分模拟Expectations,则测试失败并出现Missing invocation错误,这是预期的。所以,似乎我必须部分模拟测试对象。<​​/ p>

但是,部分模拟复杂类的测试对象会在测试时抛出各种异常,这很难调试,因为Intellij IDEA中的断点在这种情况下不起作用。

那么,这里可能出现什么问题?或者,是否应该验证测试对象本身中方法的调用?

1 个答案:

答案 0 :(得分:0)

JMockit无法验证非模拟类的方法调用。在您所述的示例中,使用已注释掉的ExpectationsmyClass对象根本不会被模拟,并且验证无法实际验证其上的方法是否被调用。严格来说,这不是因为您正在验证@Tested对象;如果您创建了新的List并尝试将其中一种方法放在Verifications中,则会遇到同样的问题。