EGAD! Another two-part episode! I just can't seem to get this advanced TDD topic under control! So, this is part 1. Remember to get part 2!
Welcome to Clean Code Episode 23: Mocking, part of our sub-series on advanced Test-Driven Development. In this episode, we're going to learn about Test Doubles and Mocking.
We begin with a little puppet show. You'll recognize the characters. You'll also recognize the situation, because, in all likelihood, you've been there, done that. That situation will lead us to a software architecture replete with dependency-inverted boundaries. As the players in our drama discuss how to test the features in that architecture, we'll gradually make the case for using mocks.
Then we'll show you those mocks in a sequence of screencasts that begin with basic stubs and moving on to more involved spies. There's a lot of code to look at, and of course you can download it all from the extras link.
Then we get all academic and study the classification of Test Doubles. We talk, in depth, about dummies, stubs, spies, mocks, and fakes. And there is plenty of code describing each.
All that takes an hour. And at the end of that hour, part 1 comes to an end. But don't forget to watch part 2, because things get pretty interesting over there.
In part 2, we're going to learn about the never-ending struggle between Behavior and State, and the remarkable stress this dichotomy puts on our mocking strategies. This will lead us to The Uncertainty Principle of TDD and the never ending battle between the Mockists and the Statists.
Then we'll get all pragmatic and start examining some of the most useful mocking patterns such as Self-Shunt and Test-Specific Subclass, and my favorite: Humble Object. We'll show you, with lots of code, how and when these patterns should be applied.
Indeed, we'll use the Humble Object pattern to show you how to test GUIs. We get a little Swing UI up and running and then show you how to separate the code so that the testable bits are all isolated from the GUI bits.
And then, to top it all off, we'll talk about Mocking Frameworks. We'll discuss what they are good for, when you might want to use one, and why I don't use them very much.
And that, at long last, will bring us to the close of Episode 23.