Skip to main content

Write the test backwards

When writing a test, something that I like to do is start by writing the first assertion first, and then work backwards.

My first assertion might be self::assertTrue($result).

If I ran this test, it would fail because of the undefined $result variable - but it's clear to me what I need next by asking, "Where does $result come from?".

If I need to call a method on another class and get the result, I'll add it before the assertion. Then I repeat the process and ask, "What do I need for this to work?".

Maybe I need to create some users or content in the application for the class to query and return a result based on it, so I'll create those.

With this approach, I'm not making any assumptions about the test's prerequisites, and I usually find that I end up with cleaner and more focused tests.

Was this interesting?

Subscribe to my daily newsletter for software professionals on software development and delivery, Drupal, DevOps, community, and open-source.

About me

Picture of Oliver

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