tags |
---|
testing, unittest,integrationtest |
Unit tests vs Integration tests (by Jay Bazuzi)
https://twitter.com/jaybazuzi/status/1450474664871043084
"What ratio of unit tests to integration tests we want to strive for?" 80:20 was proposed.
I like a different framing:
- If code might be written incorrectly, use a unit test.
- If code might "correctly" encode an incorrect understanding of a dependency, use an integration test.
Use integration tests to detect integration problems. If they detect local problems, that shoulda been caught by a unit test.
Sometimes this is difficult, if the code that talks to a dependency has a local mistake. In that case, refactor to make it testable in isolation.
In this way, my integration code is 100% tested by integration tests, and my non-integration code is 100% tested by unit tests.
(My integration test code is also partially tested by unit tests, but that's a separate discussion.)
Examples of integration mistakes:
- API expects JSON shaped this way, but I thought it should be shaped that way.
- Windows program reads / writes files ignoring case; fails when I port to Linux.
- Another team writes a component I will depend on; we interpret the design differently.
Examples of local (non-integration) mistakes:
- I forget the operator precedence rules in my language.
- A function I write occasionally passes null to a function I write that never expects null.
- A format string where some parameters are wrong.