Test Smell: Missing Abstractions
A well-structured test distills the interaction with the system to three portions: arranging the data, acting on the system, and asserting on the results (see Keeping Tests Consistent with AAA). Although the test requires detailed code to accomplish each of these steps, we can improve understanding by organizing those details into abstractions—code elements that maximize the essential concepts and hide the unnecessary details.
A good test is an abstraction of how clients interact with the system.
Our muddled test contains five lines that assert against the list of matches returned by search.getMatches() ...