Whether or not you’re practicing test-driven development, it’s helpful to begin
writing tests with the “Given, When, Then” structure.
// Given we have a queued order;
// When we cancel it;
// Then the order should be cancelled.
Getting the structure in with comments first has several benefits.
Firstly, it lowers the mental effort to required to start. You only need to
think about the desired behaviour in the simplest terms. What situation is this
relevant to; what happens; what should the result be? Once you’ve got that
written out it’s often easier to go on to the next steps.
Secondly, it ensures the test is clear. If you start by implementing the test
logic, it’s tempting to just get it working and then leave it at that. Later,
the purpose of the test is less clear – is this part describing an essential
behaviour, or is it just some side logic for set up? Tests are a kind of
documentation, so clarity is valuable.
Finally, if you are writing this test before implementing the code (which is
ideal), it encourages a better design. “Given, When, Then” provides a good
approach to designing a sensible interface by focusing on what it does, and not
how it does it.
Start with "Given, When, Then" tests