Chapter 6. Styles of unit testing

 

This chapter covers

  • Comparing styles of unit testing
  • The relationship between functional and hexagonal architectures
  • Transitioning to output-based testing

Chapter 4 introduced the four attributes of a good unit test: protection against regressions, resistance to refactoring, fast feedback, and maintainability. These attributes form a frame of reference that you can use to analyze specific tests and unit testing approaches. We analyzed one such approach in chapter 5: the use of mocks.

In this chapter, I apply the same frame of reference to the topic of unit testing styles. There are three such styles: output-based, state-based, and communication-based testing. Among the three, the output-based style produces tests of the highest quality, state-based testing is the second-best choice, and communication-based testing should be used only occasionally.

Unfortunately, you can’t use the output-based testing style everywhere. It’s only applicable to code written in a purely functional way. But don’t worry; there are techniques that can help you transform more of your tests into the output-based style. For that, you’ll need to use functional programming principles to restructure the underlying code toward a functional architecture.

6.1. The three styles of unit testing

6.2. Comparing the three styles of unit testing

6.3. Understanding functional architecture

6.4. Transitioning to functional architecture and output-based testing

6.5. Understanding the drawbacks of functional architecture

Summary

sitemap