Спасибо большое за пояснения. Еще несколько вопросов касательно тестирования:
- В юнит-тестах мы проверяем как работает контракт данного класса/чего-то там, и при этом используем заглушки/стабы для имитации зависимостей этого класса. Стабы должны реализовывать соотв. контракты/интерфейсы. И нам нужно столько вариантов стабов чтобы покрыть все ветки логики внутри тестируемого класса. Правильно ли все это?
- Что, если некоторый метод тестируемого класса делает какой-то сайд-эффект и по сути не требуется что-то возвращать из этого метода? Как тестить в таком случае? Нормально ли мокать методы в стабах зависимостей и потом проверять что они были вызваны как надо? Или это признак криво спроектированного класса и нужно думать как это все переделать?
- Если мы делаем стабы контрактов зависимостей, это вроде как выглядит норм, но как быть в языках где нет поддержки контрактов/интерфейсов (например ES5/ES6), ведь если случайно (или не очень) поменять один из методов являющихся частью контракта у самого класса зависимости, то тесты могут оставаться зелеными, т.к. у нас стаб это нечто отдельное и нам нужно вручную искать где предыдущий вариант этого метода использовался и править все руками. Или есть что-то что может помочь с этим справиться?