gpt4 book ai didi

java - 缺少调用带有模拟实例参数的预期静态方法

转载 作者:行者123 更新时间:2023-12-01 11:57:20 25 4
gpt4 key购买 nike

我正在使用 JMockIt 1.8,并且我有以下类(class):

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 内的方法

最佳答案

我无法解释

why does the behavior change depending on whether method() is called

但在 JMockit 1.14 中,行为始终相同:测试失败 simple.method() 是否被调用。

但是,您可以通过在期望 block 中添加一行来测试您想要的内容(使用 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();
}
}

希望这有帮助......

关于java - 缺少调用带有模拟实例参数的预期静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28343325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com