我正在使用JMockIt 1.8 ,我有以下类:
public class SimpleUser {
public static void useSimple(final SimpleClass simple) {
System.out.println("useSimple called");
}
public void createAndUse() {
final SimpleClass simple = new SimpleClass();
simple.method();
SimpleUser.useSimple(simple);
}
}
和
public class SimpleClass {
public void method() {
}
}
使用以下测试类:
public class Tester {
@Mocked SimpleClass simple;
@Test
public void test() {
new Expectations(SimpleUser.class) {
{
new SimpleClass();
simple.method();
SimpleUser.useSimple(simple);
}
};
SimpleUser user = new SimpleUser();
user.createAndUse();
}
}
这个测试通过了。
但是,当我删除simple.method()
中对SimpleUser
的调用以及simple.method()
中对Tester
的期望时,测试错误为:
mockit.internal.MissingInvocation: Missing invocation of
SimpleUser#useSimple(SimpleClass simple)
with arguments: SimpleClass@45490852
我可以通过将期望从SimpleUser.useSimple(simple)
更改为SimpleUser.useSimple((SimpleClass) any)
来使测试的此修改版本通过,但我想断言传递的实例是正确的。
为什么行为会改变,具体取决于是否调用method()
和如何确保使用SimpleUser.useSimple()
中创建的SimpleClass
调用createAndUse()
求助于在SimpleClass
中调用方法。
答案 0 :(得分:1)
我无法解释
为什么行为会根据是否调用method()而改变
但是对于JMockit 1.14,行为始终是相同的:调用失败simple.method()
是否被调用。
但是,您可以通过在期望块中添加一行来测试您想要的内容(使用JMockit 1.14测试):
public class Tester {
@Mocked
SimpleClass simple;
@Test
public void test() {
new Expectations(SimpleUser.class) {
{
new SimpleClass();
result = simple; // <- here
simple.method();
SimpleUser.useSimple(simple);
}
};
SimpleUser user = new SimpleUser();
user.createAndUse();
}
}
希望这有帮助...