2013-06-27 3 views
0

Q1: Когда это идеальный вариант для запуска модульного теста? Должен ли он запускаться до каждого раза, когда я отправляюсь на отладку приложения? Должны ли они выполняться до того, как я вступлю в svn? Я думаю, что если приложение имеет только пару тестов, он должен запускаться каждый раз, когда приложение собирается отлаживать. Но давайте скажем, что сотни тестов на единицу, которые могут занять немного времени, но не уверены, что это идеально или нет. Я думаю, тогда было бы лучше просто запустить их, прежде чем совершать или развертывать.Когда выполнять мой модульный тест и почему использовать Moq

Q2: В моем приложении Я использую шаблон хранилища со служебным слоем. Я провел некоторое исследование о том, как тестировать службу, когда служба вызывает репозиторий, а репозиторий запрашивает db. Поэтому для того, чтобы он был истинным модульным тестом, а не интеграционным тестом, я должен найти способ протестировать, не касаясь базы данных. Я обнаружил, что люди используют Moq, чтобы издеваться над своим хранилищем. Вот где у меня проблема, мне кажется, что если я издеваюсь над репозиторием, то я меняю поведение того, как метод должен работать, и мне кажется бессмысленным модульным тестом. Кажется, вы не тестируете свой код. Неужели я не ошибаюсь? Спасибо за любой совет.

ответ

1

Позвольте мне сделать снимок.

A1: Когда вы реорганизуете существующий код, вы должны выполнить соответствующие модульные тесты (не все) и посмотреть, не нарушены ли ваши изменения. Для новой функциональности вы должны параллельно выполнять новые модульные тесты с использованием TDD. Вы никогда не должны выполнять все модульные тесты самостоятельно, но должны использовать или полагаться на непрерывную интеграцию.

A2: У меня было такое же мнение, как и вы. Но теперь я убежден, что требуется единичное тестирование для уровня обслуживания. Все, что может быть покрыто с помощью модульного тестирования, должно быть покрыто. На данный момент ядро ​​ваших служб может просто быть делегацией в репозиториях, но услуги развиваются. Услуги берут на себя ответственность за проверку параметров, авторизацию, протоколирование, транзакции, пакетный API поддержки и т. Д. Тогда это не только доступ к данным, но и многое другое. Если бы я был на вашем месте, я бы пошел на модульное тестирование сервисов, насмехаясь над репозиториями. Иногда службы предоставляют удобные методы поверх репозитория.

Надеюсь, это может вам помочь.

1

A1. Когда вы вносите изменения в свой код, чем чаще вы запускаете тесты устройства, тем быстрее вы получите обратную связь о том, повлияло ли поведение, которое они были написаны на утверждение, так что чем чаще, тем лучше! Единичные тесты должны быть очень быстрыми, а несколько сотен должны занимать не более пары минут, но, возможно, стоит посмотреть на infinitest (при работе с java, я ожидаю, что альтернатива будет существовать для .net и т. Д.), Это плагин для затмение и автоматически запускает ваши модульные тесты, когда eclipse создает ваш проект. Это достаточно умно, чтобы запускать только те тесты, которые были затронуты с момента последнего запуска, например. если вы обновите тест или обновите какой-либо «прикладной» код, который покрывается некоторыми модульными тестами, будут выполнены конкретные тесты.

A2. Модульные тесты будут охватывать множество различных сценариев, которые будут многократно вызывать ваши услуги + даос, использование «реальных» сервисов затруднит гарантирование результатов каждого вызова (и настройка данных для каждого теста может быть болезненной), но также результаты могут быть медленными. Как правило, лучше, когда модульное тестирование имитирует эти службы и тестирует их самостоятельно с помощью интеграционных тестов.