Yak shaving

In the examples provided in previous chapters, you may have noticed there was a lot of moving around of code that didn't seem to have any immediate benefit. In TDD, especially at the beginning of a project, some work must be done that doesn't seem to make much sense. Tests are written that do nothing more than proving the existence of a class or method. The code is refactored in a way that only pushes hard-coded values into another dependency. This means that more files are created, and you may find yourself writing a significant amount of helper classes. All of these activities are referred to as yak shaving.

Yak shaving has two meanings that pertain to software development. The first and the one to be avoided is writing things that aren't needed as a means of procrastination. The second is the act of doing all the things that must be done to prepare the code. The difference between the two is a fine line. The side of the line you are on is determined by your intent in writing your code. Are you avoiding the code that you should be writing or are you laying the groundwork for efficient and effective software development using TDD?

In our case, as discussed in earlier chapters, we are either laying the groundwork for future tests, or we are implementing a known technique for preventing writer's block in our tests. Sometimes, the process of preparing an application for being tested can take quite a while.

When working in a legacy application, you could spend the better part of a week simply creating factories, adding interfaces to existing classes, writing test doubles, or doing safe refactoring techniques. All of these activities can help to improve testability and ensure a smooth testing experience. It is important to avoid getting carried away with these activities though.  We only want to do them as a means of driving the next test forward.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.145.64.126