Why most (all?) unit test frameworks have large APIs with separate functions for specifying different types of boolean conditions (eg. assertEquals
, assertNotEqual
, etc) instead of using single assert
function (or language construct) with desired boolean expression?
A simple assert
will only throw AssertionError
stating that the asserted conditation evaluated to false:
assert "foo".equals("boo")
java.lang.AssertionError: assertion failed
(not to mention assert string1 == string2
is incorrect due to reference comparison)
By passing both a
and b
the library can include them in the error message. Here: FEST assertions:
assertThat("foo").isEqualTo("boo");
//throws:
Exception in thread "main" org.junit.ComparisonFailure:
expected:<'[b]oo'> but was:<'[f]oo'>
Note that some languages are more powerful:
In Groovy (example from: Groovy 1.7 Power Assert):
a = 10
b = 9
assert 91 == a * b
yields:
Assertion failed:
assert 91 == a * b
| | | |
| 10| 9
| 90
false
at ConsoleScript2.run(ConsoleScript2:4)
In Scala (ScalaTest) there is a special ===
operator:
assert(1 === 2)
yields 1 did not equal 2
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With