我最近开始在我的项目中编写单元测试,我注意到所有断言语句都有一个消息参数。
什么是单元测试的好消息?
$cache->set('foo', 3);
$this->assertEquals($cache->get('foo'), 3, 'what should i say?');
谢谢!
答案 0 :(得分:3)
陈述被测事实。
考虑:
$this->assertEquals($person->age, 21, "Age is 21")
VS:
$this->assertEquals($person->age, 21, "Age of person born on 1990-12-20");
一个好的单元测试消息可以帮助您快速猜出错误的位置。一个糟糕的人会让你花更多的时间去打猎。
答案 1 :(得分:1)
我通常会让它们保持良好和简短 - 只是正在测试的是什么。这条消息不必解释所有可能出错的事情的故事,只需要将读者指向正确的初始方向即可。测试应该足够清楚,以便他们可以从那里弄明白。
通常我会写下我的消息,以便不熟悉测试的人至少会有一些上下文,并且更了解测试的人可能会确切地知道出了什么问题(或者至少在测试中的位置)出了问题)。
在上面的示例中,我会说“cache for'foo'”之类的内容,这样消息就会回复为“foo'缓存预期为3但是为67”。对于熟悉测试的人来说,这将比“预期的3更有用,但在测试abc的第123行中是67”。
(我主要是一个Java开发人员,所以我说的就好像这是JUnit;我假设phpunit或其他所谓的工作方式相同。)
答案 2 :(得分:0)
This article在跳过message参数方面做得很好。总结:
附注:我发现使用DataRows等功能时,消息很好。该消息有助于区分哪个DataRow可能失败。 C#/ VS测试示例:
[TestMethod]
[DataRow(<some arguments>, <message1>)]
[DataRow(<some arguments>, <message2>)]
[DataRow(<some arguments>, <message3>)]
public void MyTest(<some params>, string message)
{
...
}