Первоначально я сильно склонялся к тому, чтобы отдавать предпочтение юнит-тестам, а не функциональным / приемочным, из-за начального фактора стоимости приемочных испытаний. Однако со временем я изменил свою философию и теперь являюсь сильным сторонником выбора приемочных испытаний везде, где это возможно, и использую только модульные тесты, когда приемочные испытания не могут удовлетворить мои потребности.
Базовое обоснование выбора приемки по сравнению с модульными тестами такое же, как и базовое обоснование для кода SOLID . Ваша реализация должна быть в состоянии кардинально измениться с помощью рефакторинга и т. Д., Но все бизнес-кейсы - приемочные тесты - должны быть в состоянии остаться неизменными и доказать приемлемое поведение системы (тесты пройдены). В модульных тестах часто существует сильная связь между тестом и кодом реализации. Несмотря на то, что это тестовый код, его все равно следует избегать, и мы должны избегать сильной связи. Выбирая приемочные тесты, вы часто ведете по спирали успеха, создавая хорошо спланированные, расходуемые, не связанные между собой API, позволяющие вашей реализации меняться за кулисами, не заставляя ваши тесты меняться. Кроме того, ваши мысли о реализации разработчика соответствуют мыслям о поведении бизнес-системы. В конце концов я нахожу, что все это лучше для бизнеса и для кодера.
С теоретической точки зрения я часто спрашиваю себя, не может ли кусок кода быть проверен с помощью приемочного теста, почему этот кусок кода должен существовать? IE - если это не является частью действующего бизнес-сценария, то добавляет ли этот код ценность или в настоящее время и будет ли он стоить исключительно?
Кроме того, если вы хорошо комментируете / документируете свои приемочные тесты, эти комментарии / документы, как правило, являются наиболее актуальным и точным языком системы - что обычно позволяет вам избежать других менее ценных подходов к документированию. Модульные тесты не поддаются такой форме «делового общения».
Наконец, я не сформировал эту точку зрения только из-за своего личного развития, она оказалась успешной с парой разных проектных команд в моей «очень корпоративной» рабочей среде.
JB
http://jb -brown.blogspot.com