Skip to content

Latest commit

 

History

History
125 lines (75 loc) · 3.33 KB

File metadata and controls

125 lines (75 loc) · 3.33 KB

Code Smell 52 - Fragile Tests

Code Smell 52 - Fragile Tests

Tests are our safety nets. If we don't trust on their integrity, we will be in great danger

TL;DR: Don't write non-deterministic tests.

Problems

  • Determinism

  • Confidence loss

  • Wasted time

Solutions

  1. Test should be in full control. There should be no space for erratic behavior and degrees of freedom.

  2. Remove all tests coupling.

Coupling - The one and only software design problem

Examples

  • Fragile, Intermittent, Sporadic or Erratic tests are common in many organizations.

Nevertheless, they mine the developers trust.

We must avoid them.

Sample Code

Wrong

public abstract class SetTest {
 
    protected abstract Set<String> constructor();
   
    @Test
    public final void testAddEmpty() {
        Set<String> s = this.constructor();
        s.add("green");
        s.add("blue");
        assertEquals("{green. blue}", s.toString());
       // This is fragile
       // since it depends on set sort (which is not defined)
    }   
}

Right

public abstract class SetTest {
 
    protected abstract Set<String> constructor();
   
    @Test
    public final void testAddEmpty() {
        Set<String> s = this.constructor();
        s.add("green");
        assertEquals("{green}", s.toString());
    }   

    @Test
    public final void testEntryAtSingleEntry() {
        Set<String> s = this.createFromArgs("red");
        Boolean x = s.contains("red");
        assertEquals(true, x);
    } 
}

Detection

Detection can be done with test run statistics.

It is very hard to put some test in maintenance since we are removing a safety net.

More Info

Stack Exchange

Relations

Code Smell 76 - Generic Assertions

Code Smell 204 - Tests Depending on Dates

Tags

  • Coupling

  • Determinism

Conclusion

Fragile tests show system coupling and not deterministic or erratic behavior.

Developers spend lots of time and effort fighting against these false positives.

Credits

Photo by Jilbert Ebrahimi on Unsplash


The amateur software engineer is always in search of magic.

Grady Booch

Software Engineering Great Quotes


This article is part of the CodeSmell Series.

How to Find the Stinky Parts of your Code