JUnit 消息应该声明成功或失败的条件吗?

2022-08-31 14:12:56

我可以用两种方式之一编写断言消息。陈述成功:

assertEquals( "objects should be identical", expected, actual );

或者说明被打破的条件:

assertEquals( "objects aren't identical", expected, actual );

在JUnit中是否有专门的标准?如果不是,双方的论点是什么?

附言:我在网上看到过一些文章,在没有解释的情况下演示了这两个,所以仅仅说“搜索谷歌”不是一个答案!

[更新]

每个人都被我使用的事实所困扰,因此该消息可能是无用的。当然,这只是因为我想简单地说明这个问题。assertEquals

所以想象一下它是:

assertTrue( ... big long multi-line expression ... );

消息有用的位置。


答案 1

我甚至很少打扰消息,至少对于.任何明智的测试运行者都会解释你正在使用和两个本来应该是平等的东西。您的任何消息都不会提供比这更多的信息。assertEqualsassertEquals

我通常发现单元测试失败是暂时性的事情 - 我会迅速找出问题所在并修复它。“找出问题所在”通常涉及足够的细节,以至于单个消息不会有太大区别。考虑“通过发送消息节省的时间”与“思考消息所花费的时间”:)

编辑:好的,有一种情况我可能会使用一条消息:当文本中有一个紧凑的描述时,从对象的字符串表示中看不出来。

例如:比较存储为毫秒的日期时,“预期日期为 12 月 1 日”。

我不会担心你如何准确地表达它:只要确保从信息中可以明显看出你的意思。“应该是”或“不是”都很好 - 只是“12月1日”不会很明显。


答案 2

根据 junit API,该消息是“AssertionError 的识别消息”,因此它不是描述应满足条件的消息,而是描述在条件未满足时出错的消息。因此,在您的示例中,“对象不相同”似乎更符合要求。


推荐