我有以下课程,我需要编写单元测试。我需要自己验证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中的断点在这种情况下不起作用。
那么,这里可能出现什么问题?或者,是否应该验证测试对象本身中方法的调用?
答案 0 :(得分:0)
JMockit无法验证非模拟类的方法调用。在您所述的示例中,使用已注释掉的Expectations
,myClass
对象根本不会被模拟,并且验证无法实际验证其上的方法是否被调用。严格来说,这不是因为您正在验证@Tested
对象;如果您创建了新的List
并尝试将其中一种方法放在Verifications
中,则会遇到同样的问题。