Asserting against booleans makes error tracking more difficult.
TL;DR: Don't assert true unless you are checking a boolean
- Fail Fast Principle
-
Check if the boolean condition can be rewritten better
-
Favor assertEquals
When asserting to a boolean our test engines cannot help us very much.
They just tell us something failed.
Error tracking gets more difficult.
<?
final class RangeUnitTest extends TestCase {
function testValidOffset() {
$range = new Range(1, 1);
$offset = $range->offset();
$this->assertTrue(10 == $offset);
// No functional essential description :(
// Accidental description provided by tests is very bad
}
}
// When failing Unit framework will show us
//
// 1 Test, 1 failed
// Failing asserting true matches expected false :(
// () <-- no business description :(
//
// <Click to see difference> - Two booleans
// (and a diff comparator will show us two booleans)
<?
final class RangeUnitTest extends TestCase {
function testValidOffset() {
$range = new Range(1, 1);
$offset = $range->offset();
$this->assertEquals(10, $offset, 'Pages must have 10 as offset');
// Expected value should always be first argument
// You add a functional essential description
// to complement accidental description provided by tests
}
}
// When failing Unit framework will show us
//
// 1 Test, 1 failed
// Failing asserting 0 matches expected 10
// All pages must have 10 as offset <-- business description
//
// <Click to see difference>
// (and a diff comparator will help us and it will be a great help
// for complex objects like objects or jsons)
[X] Semi-Automatic
Some linters warn us if we are checking against boolean after setting this condition.
We need to change it to a more specific check.
- Test Smells
Try to rewrite your boolean assertions and you will fix the failures much faster.
Code Smell 101 - Comparison Against Booleans
Code Smell 07 - Boolean Variables
Photo by Joël de Vriend on Unsplash
I've finally learned what 'upward compatible' means. It means we get to keep all our old mistakes.
Dennie van Tassel
Software Engineering Great Quotes
This article is part of the CodeSmell Series.