Code Smell 104 — Assert True
Asserting against booleans makes error tracking more difficult.
Asserting against booleans makes error tracking more difficult.

TL;DR: Don’t assert true unless you are checking a boolean
Problems
Fail Fast Principle
Solutions
1. Check if the boolean condition can be rewritten better
2. Favor assertEquals
Context
When asserting to a boolean our test engines cannot help us very much.
They just tell us something failed.
Error tracking gets more difficult.
Sample Code
Wrong
<?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)Right
<?final class RangeUnitTest extends TestCase {
function testValidOffset() {
$range = new Range(1, 1);
$offset = $range->offset();
$this->assertEquals(10, $offset, 'All pages must have 10 as offset');
//Expected value should always be first argument
//We 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)Detection
[X] SemiAutomatic
Some linters warn us if we are checking against boolean after setting this condition.
We need to change it to a more specific check.
Tags
Test Smells
Conclusion
Try to rewrite your boolean assertions and you will fix the failures much faster.
Relations
Code Smell 97 — Error Messages Without Empathy
We should take special care with error descriptions for the users (and ourselves).blog.devgenius.io
Code Smell 07 — Boolean Variables
Using boolean variables as flag, exposes accidental implementation and pollutes the code with Ifs.blog.devgenius.io
More Info
Fail Fast
Failure is fashionable. Making is much easier than thinking and failures are not stigma, let’s take this idea to our…codeburst.io
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
Sometimes a short thought can bring amazing ideas.blog.devgenius.io
This article is part of the CodeSmell Series.
How to Find the Stinky parts of your Code
The code smells bad. Let’s see how to change the aromas.blog.devgenius.io

