Если тебе сложно написать тест, то это не проблема тест-фреймворка, моков и т.п. Сложный тест - это признак того, что в дизайне системы есть проблемы. Тесты являются конкретной практикой, которая позволяет делать дизайн лучше даже в тех случаях, когда ты не знаешь, что такое паттерны проектирования.
Бывают моменты, когда приходится прилагать много усилий для написания теста очередной функции. Ты начинаешь писать тест и его код разрастается до невиданных размеров или ты стопоришься на том, что не знаешь, как “замочить” или “застабить” функцию/класс. И тут начинается колдовство и просыпается изобретательность, которые приводят к тому, что коллега, просмотрев тест, с трудом понимает, что в нем происходит.
Если у тебя сейчас так, то тебе нужно остановиться. Убери руки с клавиатуры и взгляни на свою систему. Возможно тебе стоит заменить наследование композицией? Возможно твоя функция берет на себя слишком много обязанностей? А может у тебя слишком много зависимостей? Подумай, что мешает тебе написать простой тест?
Как в истории про лягушку и котел: если лягушку борсить в котел с кипящей водой, то она сразу выпрыгнет от туда. Если в котле будет холодная вода и он будет нагреваться постепенно, то лягушка сварится. Тесты позволяют вам почувствовать момент, когда дизайн системы начинает усложняться и когда следует выпрыгивать из котла














[...] Индикатор плохого дизайна — небольшая заметка о том, как использование тестов заставляет улучшать архитектуру недостаточно гибко-спроектированых систем. [...]