Как запустить юнит-тест старого и нового кода?

Я признаю, что у меня почти нет опыта юнит-тестирования. Я попытался с DUnit некоторое время назад, но сдался, потому что в моем приложении было так много зависимостей между классами. Это довольно большое (около 1,5 млн. Строк исходного кода) приложение Delphi, и мы являемся командой, которая его поддерживает.

На данный момент тестирование выполняется одним человеком, который использует его перед выпуском и сообщает об ошибках. Я также настроил некоторые тесты GUI в TestComplete 6, но он часто дает сбой из-за изменений в приложении.

Bold для Delphi используется в качестве основы персистентности для базы данных. Мы все согласны с тем, что юнит-тестирование - это путь, и мы планируем написать новое приложение в DotNet с ECO как средой персистентности.

Я просто не знаю, с чего начать юнит-тестирование... Какие-нибудь хорошие книги, URL, лучшие практики и т.д.?

5 ответов

Решение

Ну, проблема в модульном тестировании заключается не в самом тестировании, а в написании тестируемого кода. Если код был написан, не думая о тестировании, то вам, вероятно, будет очень трудно.

В любом случае, если вы можете рефакторинг, сделайте рефакторинг, чтобы сделать его тестируемым. Не смешивайте создание объектов с логикой, когда это возможно (я не знаю delphi, но может быть какая-то структура внедрения зависимостей, чтобы помочь в этом).

В этом блоге много хорошего о тестировании. Проверьте эту статью, например (мое первое предложение было основано на нем).

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

Написание модульных тестов для унаследованного кода обычно требует большого количества рефакторинга. Отличная книга, в которой рассказывается об этом, - "Эффективная работа с устаревшим кодом" Майкла Фезера.

Еще одно предложение: используйте инструмент покрытия модульных тестов, чтобы указать ваш прогресс в этой работе. Я не уверен насчет хороших инструментов покрытия для кода Delphi. Я думаю, это был бы другой вопрос / тема.

Эффективная работа с устаревшим кодом

Когда вы работаете с унаследованным кодом, макетные объекты действительно полезны для создания модульных тестов.

Взгляните на этот вопрос, касающийся Delphi и mocks: Какая ваша любимая библиотека Moph для Delphi?

Одним из наиболее популярных подходов является написание модульных тестов при изменении кода. Все новые коды проходят модульные тесты, и для любого кода, который вы модифицируете, вы сначала пишете его тест, проверяете его, модифицируете, повторно проверяете его, а затем пишете / исправляете любые тесты, которые вам нужны в связи с вашими модификациями.

Одним из больших преимуществ хорошего охвата модульных тестов является возможность убедиться, что изменения, которые вы делаете, случайно не нарушают что-то еще. Такой подход позволяет вам сделать это, в то же время сосредотачивая свои усилия на ваших насущных потребностях.

Альтернативный подход, который я использовал, заключается в разработке моих модульных тестов через Co-Ops:)

Для модульного тестирования.Net читайте это: " Искусство модульного тестирования: с примерами в.NET "

О лучших практиках:
То, что вы сказали, правильно: иногда трудно написать модульные тесты из-за зависимости между классами... Так что пишите модульные тесты сразу после или непосредственно перед;-) реализацией классов. Например, если у вас возникли трудности с написанием тестов, возможно, это означает, что у вас проблемы с дизайном!

Другие вопросы по тегам