Testing multiple implementations with contract tests
If you have multiple implementations of a service, as I mentioned in yesterday's email, you need to ensure they all provide the same functionality.
You need to be able to run the same tests against each implementation and have them pass.
How do you do this?
In PHP, I use a trait that contains the test methods and then have a test class for each implementation that uses the trait and sets up any test data.
Then, each test class will run the methods from the contract test trait and ensure they all provide the same behaviour, regardless of how it does so - whether it communicates with an API, uses an SDK, or returns fake values.
If one implementation doesn't return the same result as the others, its test will fail.
If you add a new implementation, you create a new test class, use the trait and get the tests to pass.
- Oliver
Was this interesting?
About me
I'm an Acquia-certified Drupal Triple Expert with 17 years of experience, an open-source software maintainer and Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.