为什么大多数(所有?)单元测试框架都有大型API,其中包含用于指定不同类型的布尔条件的单独函数(例如assertEquals
,assertNotEqual
等),而不是使用单个{{1}具有所需布尔表达式的函数(或语言构造)?
答案 0 :(得分:5)
一个简单的assert
只会抛出AssertionError
,说明断言的条件被评估为false:
assert "foo".equals("boo")
java.lang.AssertionError: assertion failed
(更不用说assert string1 == string2
由于参考比较而不正确)
通过传递a
和b
,库可以将它们包含在错误消息中。在这里:FEST assertions:
assertThat("foo").isEqualTo("boo");
//throws:
Exception in thread "main" org.junit.ComparisonFailure:
expected:<'[b]oo'> but was:<'[f]oo'>
请注意,某些语言更强大:
在Groovy中(例如:Groovy 1.7 Power Assert):
a = 10
b = 9
assert 91 == a * b
的产率:
Assertion failed:
assert 91 == a * b
| | | |
| 10| 9
| 90
false
at ConsoleScript2.run(ConsoleScript2:4)
在Scala(ScalaTest)中有一个特殊的===
运算符:
assert(1 === 2)
收益1 did not equal 2
。
答案 1 :(得分:3)
我可以想到两个原因:
声明意味着说你希望它做什么,而不是如何你想要它完成。
在讨论像对象平等一样受支持的东西时,差别很小,但考虑比较两个集合。你可能有assertIsSubsetOf
,assertAreSameIncludingOrder
,assertAreSameButOrderIsIrrelevant
- 我更愿意阅读这些英文名称,而不是长篇,涉及且容易混淆的实现。
答案 2 :(得分:1)
我曾经质疑这一点,直到我意识到。如果您将这两个值放入API中,那么该函数可以报告&#39;值&#39;不要断言。而不是他们不匹配的事实
blat blah blah 99并不等于10003 等等等等等等等等
其中为您提供了测试结果中有关错误问题的线索。计算机可以给予的任何帮助都是受欢迎的,并且完全符合极端测试的精神。