Unit Test

https://blog.cleancoder.com/uncle-bob/2017/10/03/TestContravariance.html

How do you recognize well-written unit tests? Here’s a handy checklist to answer that question:

  • They inject real objects (stubs) into the class under test as dependencies, instead of mocks (i.e. InMemoryRepository to the rescue)
  • They test the class under test in isolation and don’t require external services (the framework, the container, etc.)
  • They are extremely fast and take milliseconds to run
  • They are not time-dependent, i.e. won’t break during some days or some hours
  • They are independent and not coupled with other tests, i.e. changing the order of tests should not make tests go red
  • Refactoring the internal details of the class under test should not make tests go red
  • They are not testing unnecessary „logic”, i.e. setters, exact log messages, etc.
  • They are focused on testing the behavior of the class under test and not the implementation
  • They are repeatable, and deterministic, each time producing the same result
  • They are easy to maintain and comprehend, with descriptive method names that act as the name for the reason to test the code

ERREUR?

  • Un test = Une classe

SHOULD DO

  • Tester handlers (clients) et non le domaine model
  1. Pour les tests unitaire, je pense que c’est mieux de tester le comportement du système à travers les classes qui les exposent et les laisser interagir avec ses vrais dépendances, ne mocker que le monde extérieur ( db, call api, i/o…)

  2. C’est bien de respecter le pyramide de tests, y a pas un type mieux que l’autre, faut avoir tout avec les bonnes proportions et les lancer dans le bon ordre. Les tests unitaire c’est la base, ils sont tellement rapides que ça permet de “fail fast” pas besoin d’attendre 15min pour que le dernier tests d’intégration fail si le TU peut le détecter..

  3. La couverture de tests, soit on vise le 100% soit on ne le track pas, car sinon cela veut dire qu’on accepte 15% de code non couvert par les tests et on accepte des regressions dessus. Il faut faire attention aussi car le taux de couverture donne un faux sentiment de sécurité qui peut backfire