When we approach the skill of test driven development, I can see three distinct sub skills needed to accomplish it:
In this Unit Testing Best Practices program, recorded live during several TDD master classes, I deal with both Good unit tests, and test first development.I focus very little on design skills, because I believe that focusing on all three skills at the same time can be very challenging to learn.
On day 1, we begin at absolute zero: no knowledge of writing unit tests is needed, and we go through writing our first tests together, discussing readability and maintainability as we go along.Then we move into test driven development, and the string calculator kata as a demo that the students need to complete.
On day 2, we talk about mock objects, stubs and fakes. We talk through a couple of different scenarios where fakes are needed, and how to write hand written fakes. This is an important skill that can help us a lot, even when we know how to use isolation frameworks. We then move from hand written fakes to Isolation (mocking) frameworks. We discuss when they bring to the table, and contrast a few of the isolation frameworks, their APIs and their design in this Unit Testing Tutorial course.
We also discuss the idea of constrained and unconstrained isolation frameworks, and why some frameworks have more abilities than others.
On day 3, we focus on writing good tests. We start by reviewing test code written by others, and learn the essential skill of sharing knowledge with others about how to write unit tests, and how to do test reviews. We also revisit methods of writing readable, maintainable and trustworthy tests.
On day 4, we focus mainly on legacy code, ad refactoring techniques on breaking it. We take a look at extract and override, refactoring static classes into instance classes, and more. We also finish up with using an unconstrained isolation framework (Typemock isolator) to test legacy code.
On day 5, I usually do exercises on real production code written by my students at my own company. In this video series, I have chosen to incorporate a few advanced ideas as part of the learning process: We look at refactoring complex validation methods to extract and override for testability, and how to create domain specific testing isolation frameworks.
To be able to learn Unit Testing Best Practices take this course now.