I make Just Every, a set of free, open-source alternatives to subscription work software, so I spend a lot of time deciding what a test should check. Nothing in the method below needs our code. A worked example from one of our products is at the end. Most test suites are organised around what the code does. I find a failure test easier to design from the other end: start with the wrong thing a user could see on screen. Here's an exercise for it. Run it on a throwaway environment with test ...