TDD Anti-patterns: Local Hero

TDD Anti-patterns: Local Hero

Continuing the series of posts about unit tests anti patterns.

This series is inspired by a Stack Overflow thread.

You’re creating unit tests in your local environment, everything looks nice and all the tests are green. But, after you check-in the code, in effect, the tests aren’t working elsewhere, only in your machine. They aren’t working in your team members machines and the continuous integration is failing.

What could have gone wrong?

This is a typical symptom of the local hero anti-pattern. It’s usually cause by Hardcoded paths, locally installed libraries and difference in the environment configuration.

Local Hero Code Sample

To illustrate the local hero anti-pattern, take a look at the following unit test:

[Fact]
public void AnalyzeFile_ReturnFileDataAnalyzed()
{
    //Arrange
    var fileLocation = "C:\\User\\Matheus\\My Documents\\file.txt";
    var sut = new FileAnalyzer();

    //Act
    var result = sut.AnalyzerTxtFile(fileLocation);

    //Assert
    //...
}

As you can see, in this unit test we’re trying to analyze a text file but, the file is stored on my machine. This unit test will break in other people machine and on the server, because they don’t have the file at that location.

A solution to this problem is to store the file inside the solution and add it to the source control. As a result, they won’t fail in other environments anymore.

Wrap Up

To conclude, look for possible implementations that are linked to your local environment when writing unit tests.


© 2021. All rights reserved.

Powered by Hydejack v9.1.6