A test name is the first clue to what's being verified. A bad name hides intent. A good name tells the story.
✅ registers_user_with_valid_email
❌ calls_Save_on_UserRepo
given_invalid_password_when_registering_then_error_returned
Reads like a mini-spec.
✅ rejects_login_with_expired_token
❌ testLogin
Pick a pattern (camelCase, snake_case, sentence-style) and stick to it across the suite.
test1, test2, test_final
→ Useless.testUser
(what about the user?).rejects_login_with_expired_token
beats testLogin
every time.👉 A test name should explain the behavior under test so clearly that you don't need to read the code to understand it.