Chess TDD 54: Castling Acceptance Tests
The last few episodes featured heads down implementation around this new CastlingStatusChecker class. It was nice to spend some time writing relatively simple unit tests to restore some sanity and get away from an overly-coupled Board class. But, it was time to come up for some air and get back to proving some business/domain value. Toward that end, I found myself writing castling acceptance tests. But, before I could start with that, I cleaned up the constants that had grown a little awkward after my re-imagined implementations of the status checker. All sorted out now, though.
What I accomplish in this clip:
- Refactored constants in the castling status checker and the test class I was using to drive its implementation.
- Starting on the castling acceptance tests, which worked for black and white pieces.
Here are some lessons to take away:
- There’s no exact science to climbing up and down the granularity levels. The heuristic I offer in this episode is, essentially, “prefer unit tests because there’s less setup and faster feedback, but come up for air periodically and use acceptance tests to verify that you’re adding business value.”
- Make your code read plainly, like prose, in production. When it comes to writing unit tests, go even an extra step, and act as if you were writing a Word document about your code (maybe not literally, but you get the idea). The unit tests are where you explain how the system works.
- It’s perfectly reasonable to write a series of acceptance tests that you expect to go green. These acceptance tests are how you document and prove functionality to non-technical stakeholders if they have an appetite for reading and collaborating on them. So, by all means, take the time to demo the app’s behavior by writing as many of these as you need to showcase what it’s doing.
Quick tip when working in visual studio you can hold down Alt+Shift and use the arrow keys to select multiple lines for editing, this would have allowed you to easily put a # at each row.
Nice, thanks! I think I knew that once upon a time and it dropped right out of my head. Will definitely make use next time I have the opportunity.