При выполнении теста с полным флоу можно встретить несколько проблем:
Решением этих проблем может стать идея тестирования приложения по частям.
Среди unit тестов выделяют:
Когда требуется передать в функцию объект, который в дальнейшем в тесте не будет использоваться. В этом случае передается, например, пустая строка или пустой объект.
Может иметь реальную реализацию, но не может использоваться в продакшене. Например, использование In Memory DataBase вместо ORM(Object-Relational Mapping), которую скорее всего не получится использовать в продакшене.
Всегда возвращает статичный ответ по заданному запросу. Если нужно протестировать взаимодействие с внешним API, которое может быть недоступно, то его можно заменить stub'ом.
Похоже на stub, но еще может следить за вашим приложением. Например, вы тестируете функцию в результате, которой происходит отправка письма пользователю, но в тестах не нужно рассылать настоящие письма, поэтому в функцию можно встроить "шпиона", который будет следить был ли вызвов отправки письма пользователю или нет, но при этом сам он отправлять письмо не будет. Такие тесты больше на поведение, чем на состояние.
Включает преимущества всех предыдущих дублеров. Это заранее запрограммированный объект который может принимать на вход различные значения и иметь некоторые ожидания. В зависимости от этих ожиданий, он возвращает ответ.