Jump to the navigation menu

Camel-case or snake-case for test methods?

When writing object-orientated code, particularly in PHP, you usually write method names using camel-case letters - such as:

public function doSomething(): void {
  // ...
}

This is also true when writing methods within a test class - only that the method name is prefixed with the word test:

public function testSomething(): void {
}

This is probably expected and complies with the PSR code style standards like PSR-12.

Something that I've seen some PHP developers and some frameworks prefer is to write their test methods using snake-case letters and commonly removing the test prefix in favour of using an annotation:

/** @test */
public function the_api_should_return_a_200_response_code_if_everything_is_ok(): void {
  // ...
}

This is something that I've done myself for a while, but now I'm starting to reconsider both options.

Whilst it's more readable, especially for longer test names (which I like to write), it's not consistent with method names in non-test files or non-test methods in test files; it looks odd if I need to add another annotation (do I keep a single annotation on one line, or just those with multiple annotations on the separate lines), and to do this, I need to disable some code sniffer rules for code to pass the PHPCS checks.

If I used camel-cased names, I wouldn't need the PHPCS overrides, the annotations would be simpler, and the code would be more consistent - so I think I'll try that way again in the next tests that I write and see how it feels.

Which do you prefer, and which would you expect to see in your project?

- Oliver

Was this interesting?

Sign up here and get more like this delivered straight to your inbox every day.

About me

Picture of Oliver

I'm an certified Drupal Triple Expert with 18 years of experience, a Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.