Во-первых, спросите себя: «Почему модульные тесты сложно написать для моего реального кода?»Возможно, ответ в том, что ваш настоящий код делает слишком много.Если у вас есть один модуль кода, заполненный операторами «new» и «if» и операторами «switch» и умными математическими операторами и доступом к базе данных, будет сложно написать один тест, не говоря уже о адекватном тестировании логики иматематикаНо если вы вытащите «новые» операторы в фабричный метод, вы легко сможете получить фиктивные объекты для тестирования.Если вы вытащите предложения «if» и «switch» в шаблоны конечных автоматов, у вас не будет столько комбинаций для тестирования.Если вы удалите доступ базы данных к объекту внешнего поставщика данных, вы можете предоставить простые тестовые данные для выполнения ваших математических операторов.Теперь вы тестируете создание объектов, переходы состояний и доступ к данным отдельно от ваших умных математических выражений.Все эти шаги стали проще благодаря их упрощению.
Ключевой код причины, который сложно проверить, состоит в том, что он содержит «внутренние зависимости», такие как создаваемые зависимости или зависимости от библиотек.Если ваш код говорит "Foo theFoo = new Foo ();"Вы не можете легко заменить MockFoo для тестирования.Но если ваш конструктор или метод запрашивает передачу theFoo, а не конструирование самого себя, ваш тестовый набор может легко пройти в MockFoo.
Когда вы пишете код, спросите себя: «Как я могу написать модульный тест дляэтот код?Если ответ «это сложно», вы можете изменить код, чтобы облегчить его тестирование.Это делает ваш модульный тест первым фактическим потребителем вашего кода - вы тестируете интерфейс к своему коду, записывая тест.
Изменяя свои интерфейсы, чтобы облегчить их тестирование, вы будетепочувствуйте себя лучше, придерживаясь объектно-ориентированных принципов «тесного сцепления» и «слабой связи».
Юнит-тестирование - это не только тесты.Написание модульных тестов фактически улучшает ваши проекты.Пройдите немного дальше по пути, и вы получите тестовую разработку.
Удачи!