gpt4 book ai didi

java - 强制执行一行的 JUnit 断言

转载 作者:行者123 更新时间:2023-11-30 11:04:38 29 4
gpt4 key购买 nike

是否有任何 junit 断言,我可以用它强制执行一行?

例如:

doAnswer(new Answer<Void>() {
@SuppressWarnings("unchecked")
@Override
public Void answer(final InvocationOnMock invocation) throws Throwable {
Object[] arguments = invocation.getArguments();
Map<String, String> fieldMapActual = (Map<String, String>) arguments[0];
assertEquals(fieldMap, fieldMapActual);

**assertFailIfThisLineIsNotExecuted();**

return null;
}
}).when(x).myMethod(xxx);

当我模拟 myMethod 的行为时,如果 myMethod 将使用预期的值/参数调用,则来自匿名内部类型的方法答案将在 myMethod 的运行时执行(而不是在 junit 测试的运行时)。为了断言调用了该方法,我必须另外定义一个验证(否则即使未调用该方法,我的测试仍会运行)。

verify(x).myMethod(xxx); 

如果我有机会在回答方法中编写类似assertFailIfThisLineIsNotExecuted 的东西,我就不必定义额外的验证。再说一次,是否有任何 junit 断言,我可以用它强制执行一行?可以说与 fail() 相反,没有立即将方法定义为“成功”。

最佳答案

如果您想确保测试的某一行正在执行,请使用 boolean 标志:

 final boolean[] wasExecuted = { false };

...
wasExecuted[0] = true;
...

assertTrue("Some code wasn't executed", wasExecuted);

但我的直觉是您正在尝试解决不同的问题。

verify 表示“必须调用此方法”。您是否 mock 答案并不重要。所以这是您应该使用的方法。

只有在由于某种原因无法创建模拟时,我才会使用我的标志方法。如果发生这种情况,我会在我的测试代码中扩展被测类并添加标志。

verify 相比,flag 的优势在于,flag 文档是我希望代码所在的位置(您可以让 IDE 搜索所有使用 flag 的地方)。 verify() 失败时不容易定位。

verify(x).myMethod(xxx); 应该是你想要的。它还表达了意图。

assertFailIfThisLineIsNotExecuted() 也将是单行代码(那么它如何比 verify“更好”?),它不受 JUnit 支持,您会必须编写代码才能获得良好的错误消息等。

关于java - 强制执行一行的 JUnit 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29964131/

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