Does Your Test Suite Actually Test Anything?
You have 100% code coverage. Every line is executed. The CI badge is green. Then you refactor a condition from > to >=, and not a single test fails. Your tests ran the code, but they didn't verify it.
You have 100% code coverage. Every line is executed. The CI badge is green. Then you refactor a condition from > to >=, and not a single test fails. Your tests ran the code, but they didn't verify it.
Hexagonal architecture promises adapter interchangeability, but in practice, this promise often remains implicit, with nothing in the code to verify it.
Testing code that uses new DateTime('now') or time() is painful. You end up mocking native functions, or accepting fragile tests that fail at midnight.
Direct dependency on a concrete implementation causes the same kind of problems for the logger, the cache, or the ID generator...