When we talk about test cases, we mostly mean unit tests. It is incorrect to assume that the unit we want to test is always a function. The unit, or unit of work, is a logical unit that constitutes single behavior. This unit should be able to be invoked via a public interface and should be testable independently.
Thus, a unit test can perform the following functions:
It tests a single logical function
It can run without a specific order of execution
It takes care of its own dependencies and mock data
It always returns the same result for the same input
It should be self-explanatory, maintainable, and readable
Martin Fowler advocates the Test Pyramid (http://martinfowler.com/bliki/TestPyramid.html) strategy to make sure we have a high number of unit tests to ensure maximum code coverage. There are two important testing strategies that we will discuss in this chapter.