List of Smells
Assertion Roulette (224): It is hard to tell which of several assertions within the same test method caused a test failure.
Includes Eager Test, Missing Assertion Message.
Buggy Tests (260): Bugs are regularly found in the automated tests. Includes Fragile Test, Hard-to-Test Code, Obscure Test.
Conditional Test Logic (200): A test contains code that may or may not be executed. Includes Complex Teardown, Condi-
tional Verifi cation Logic, Flexible Test, Multiple Test Conditions, Production Logic in Test.
Developers Not Writing Tests (263): Developers aren’t writing automated tests. Includes Hard-to-Test Code, Not Enough
Time, Wrong Test Automation Strategy.
Erratic Test (228): One or more tests are behaving erratically; sometimes they pass and sometimes they fail. Includes Inter-
acting Test Suites, Interacting Tests, Lonely Test, Nondeterministic Test, Resource Leakage, Resource Optimism, Test Run
War, Unrepeatable Test.
Fragile Test (239): A test fails to compile or run when the SUT is changed in ways that do not affect the part the test is exer-
cising. Includes Behavior Sensitivity, Context Sensitivity, Data Sensitivity, Fragile Fixture, Interface Sensitivity, Overspecifi ed
Software, Sensitive Equality.
Frequent Debugging (248): Manual debugging is required to determine the cause of most test failures.
Hard-to-Test Code (209): Code is diffi cult to test. Includes Asynchronous Code, Hard-Coded Dependency, Highly Coupled
Code, Untestable Test Code.
High Test Maintenance Cost (265): Too much effort is spent maintaining existing tests. Includes Fragile Test, Hard-to-Test
Code, Obscure Test.
Manual Intervention (250): A test requires a person to perform some manual action each time it is run. Includes Manual
Event Injection, Manual Fixture Setup, Manual Result Verifi cation.
Obscure Test (186): It is diffi cult to understand the test at a glance. Includes Eager Test, General Fixture, Hard-Coded Test
Data, Indirect Testing, Irrelevant Information, Mystery Guest.
Production Bugs (268): We fi nd too many bugs during formal test or in production. Includes Infrequently Run Tests, Lost
Test, Missing Unit Test, Neverfail Test, Untested Code, Untested Requirement.
Slow Tests (253): The tests take too long to run. Includes Asynchronous Test, General Fixture, Slow Component Usage, Too
Many Tests.
Test Code Duplication (213): The same test code is repeated many times. Includes Cut-and-Paste Code Reuse, Reinventing
the Wheel.
Test Logic in Production (217): The code that is put into production contains logic that should be exercised only during
tests. Includes Equality Pollution, For Tests Only, Test Dependency in Production, Test Hook.