Add daily emails and archive

This commit is contained in:
Oliver Davies 2024-01-03 20:00:00 +00:00
parent 7ec664a810
commit e2b6832598
379 changed files with 11132 additions and 0 deletions

View file

@ -0,0 +1,24 @@
---
title: >
Testing multiple implementations with contract tests
pubDate: 2023-08-24
permalink: >-
archive/2023/08/24/testing-multiple-implementations-with-contract-tests
tags:
- automated-testing
- test-driven-development
---
If you have multiple implementations of a service, as I [mentioned in yesterday's email](https://www.oliverdavies.uk/archive/2023/08/23/dont-use-third-party-services-directly), 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.