A couple of extra points I've found useful:<p>The first test of a class of tests is the hardest, but it's almost always worth adding. Second and subsequent tests are much easier, especially when using:<p>Parametrised tests let you test more things without copying boilerplate, but don't throw more variants <i>just</i> to get the count up. Having said that:<p>Exhaustive validation of constraints, when it's plausible. We have ~100k tests of our translations for one project, validating that every string/locale pair can be resolved. Three lines of code, two seconds of wall-clock time, and we know that everything works. If there are too many variants to run them all, then:<p>Prop tests, if you can get into them. Again, validate consistency and invariants.<p>And make sure that you're actually testing what you think you're testing by using mutation testing. It's great for having some confidence that tests actually catch failures.