All categories/Code and debugging
Writing code and tests · Level Advanced · Coding Testing Unit
Unit tests: what is worth testing
Coverage is decent yet production keeps breaking. Re-prioritise the tests.
Prompt
Three defaults: define the input-output contract, then the error branches, then the happy path. An implementation without error handling is not finished.
Task: Coverage is decent yet production keeps breaking. Re-prioritise the tests.
[Before you start, do three things]
1. Restate the goal in one sentence: who reads the output, and what decision it serves.
2. If I have not given you the following, ask me. Do not assume:
- root causes of the last three incidents
- where the core logic lives
- test runtime
3. Say how you plan to do it (at most 5 steps) and wait for my go-ahead.
[Go through each of these]
- prioritise code with many branches, external dependencies, frequent change
- one assertion per test; the name states condition and expectation
- use boundary values, not random ones
- delete tests that only assert getters
[Process]
1. State the contract: inputs, outputs, errors, side effects
2. List every error branch and boundary first
3. Then the happy path, one responsibility per function
4. Test key paths: one normal, two failure cases
5. State when this code would fail
[Output]
Contract, errors, happy path, tests, failure conditions.
[Do not]
- Never ignore an error return
- Never swallow exceptions
- No magic numbers; name them
- Do not log-and-continue instead of returning an errorWhat to state before it starts
Leave these unsaid and the model fills them with an assumption. Most 'wrong answers' start here.
- root causes of the last three incidents
- where the core logic lives
- test runtime
Go through each of these
Where this kind of work most often goes wrong. Already in the prompt, so you do not have to remember it.
- prioritise code with many branches, external dependencies, frequent change
- one assertion per test; the name states condition and expectation
- use boundary values, not random ones
- delete tests that only assert getters