【问题标题】:I don't want assertJ assertThat ends test when assertion fails我不希望 assertJ assertThat 在断言失败时结束测试
【发布时间】:2018-11-22 19:45:36
【问题描述】:

我使用 assertJ 并且在我的测试用例中有多个 assertThat 断言。 当第一个断言失败时,测试完成,但我不希望那样。 我想在单次执行测试用例后获得有关所有失败断言的信息。 有什么办法吗? 我在这里找到了 SoftAssertions 的解决方案 -> http://joel-costigliola.github.io/assertj/assertj-core-features-highlight.html#soft-assertions 但是在每个 assertThat

之前添加 variable. 很丑

【问题讨论】:

  • 我注意到您的问题仍然是“开放的”:您没有接受答案。请查看并决定是否要accept 回答。或者让我知道我是否可以做些什么来增强我的输入以使其被接受。接受有助于未来的读者确定问题是否得到解决,并对花时间回答你的人表示感谢。

标签: java testing automated-tests assertj


【解决方案1】:

一些示例代码会有所帮助,但这更像是一个理论问题,因为真正的答案是:考虑在一个测试调用中不要有多个断言!

含义:测试失败的想法是让您尽快解决问题。当你将多个断言组合到一个测试中时,默认情况下你会让我们的生活变得更加艰难。因为您不必知道“带有断言 Y 的测试 X 失败了,您必须首先非常仔细地研究日志以确定哪些断言通过了,哪些断言失败了。

因此建议的做法是将多个断言/检查放入单个测试中。

【讨论】:

  • 嘿,亲爱的!总是很高兴阅读您的帖子并环顾四周!同意“测试失败的想法是让您尽快解决问题。”但不太同意“实践是不要将多个断言/检查放入单个测试中。”
【解决方案2】:

如果您不喜欢软断言,您可以尝试JUnit 5 assertAll,否则我会遵循@GhostCat 的建议并尝试在每个测试中断言一件事(通常只会导致几个断言)。

【讨论】:

  • 引用问题中的assertAll 示例似乎可以通过您图书馆的优秀assertThat(...).extracting(...).containsExactly(...) 很好地实现!谢谢你:)
【解决方案3】:

我认为在某些情况下,您可能,有时甚至您必须在一个测试方法中断言多个事情,如果您的方法执行了多个您应该检查的更改不同的层次/抽象。
例如,当您测试在存储该元素的对象中添加元素的方法时,您可以断言该对象中包含的元素数量增加了 1,但您还可以检查新元素的值是否正确添加。
您有两个级别/抽象:包含具有“直接/核心”状态的元素的对象和它包含的具有自己状态的元素。

将它分成两个断言,它会给出一个看起来像这样的测试:

@Test
public void addElt(){
    foo.addElt(new Element("a name", "a role"));

    assertThat(foo).extracting(Foo::getSize)
                   .contains(actualSize+1);    
    assertThat(foo.getLastElt()).extracting(Element::getName, Element::getRole)
                                .containsExactly(addedElt.getName(), addedElt.getRole());
}

那么现在为什么要尝试耦合两个检查两个不同的断言 东西?
它真的为调试测试带来价值吗?
我不这么认为。
试图在一个断言中断言两个抽象级别的变化显然没有意义:复杂而无用的噪音。
如果第一个断言失败:

assertThat(foo).extracting(Foo::getSize)
               .contains(actualSize+1);  

这很可能意味着该元素没有被添加。
所以在这种情况下,执行第二个断言:

assertThat(foo.getLastElt()).extracting(Element::getName, Element::getRole)
                            .containsExactly(addedElt.getName(), addedElt.getRole());

没有意义,因为它很可能也会出错。
处理故障测试的开发人员只需要有有用的信息,而不是可以使其解决变得更加困难的噪音。因此,对与预期不同的尺寸进行反馈正是您所需要的。

我试图解释的对于 AssertJ 和任何测试框架都是正确的。

【讨论】:

  • 不错的一个。现在让我们希望 OP 在某个时候回来接受其中一个答案。
  • 我们说的等着看:)
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 2017-04-10
  • 1970-01-01
  • 2021-10-25
  • 2019-04-11
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多