--- title: > Writing good test names pubDate: 2023-11-18 permalink: >- archive/2023/11/18/writing-good-test-names tags: - software-development - test-driven-development - automated-testing - php - phpunit --- In PHPUnit, there are different ways to write test methods. The standard way is to use camel-case method names with a `test` prefix, for example: ```php public function testTheProjectNameShouldBeAString(): void { // ... } ``` Another popular way, particularly in some frameworks, is to use snake-case method names: ```php /** @test */ public function the_project_name_should_be_a_string(): void { // ... } ``` This may be more readable but only works if the `@test` annotation is present. What if you need to add another annotation, such as `@dataProvider` to the test? Do you do multi-line docblocks everywhere, or mix and match single and multiple line docblocks depending on the test? ## Here's the thing My preference switches between both ways of writing test methods. But, whichever way I write it, I write descriptive method names that explain what the test does - even if it means having a long method name. I avoid short and generic names like `testUpdate()`. People should be able to read the test name and understand what it does and what it's testing.