daily-email: add 2023-08-24
Testing multiple implementations with contract tests
This commit is contained in:
parent
fd40fdd085
commit
d080945390
24
src/content/daily-email/2023-08-24.md
Normal file
24
src/content/daily-email/2023-08-24.md
Normal 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](), 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.
|
Loading…
Reference in a new issue