Каковы плюсы и минусы отдельного проекта, посвященного только юнит-тестам? - PullRequest
4 голосов
/ 11 ноября 2010

Можете ли вы сравнить преимущества и недостатки наличия всех ваших модульных тестов в одном проекте, посвященных только модульным тестам, с тем, чтобы ваши модульные тесты располагались на соответствующих сборках?

Спасибо

Ответы [ 5 ]

8 голосов
/ 11 ноября 2010

Преимущества хранения их в отдельных сборках:

  • не увеличивает излишне сложность тестируемого модуля и не нарушает разделение задач.

  • вам не нужно будет ссылаться на вашу среду тестирования в вашем решении.

  • она позволит (или, по крайней мере, облегчит вам) настройкуваш проект в среде CI.

3 голосов
/ 11 ноября 2010

Для меня есть 2 непосредственных плюса.

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

Другим преимуществом является среда непрерывной интеграции (CI), я могу указать моей платформе модульного тестирования на список сборок, которые соответствуют предопределенному шаблону имени, например, любые сборки, заканчивающиеся на «Test».

2 голосов
/ 11 ноября 2010

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

0 голосов
/ 11 ноября 2010

Специально для C #:

Обратите внимание, что класс и его тесты тесно связаны.Разделение на две сборки растягивает это связующее звено через границы сборки.

Я предпочитаю размещать свои модульные тесты в той же сборке, что и класс, который они тестируют.Для каждого класса C в пространстве имен N я помещу модульные тесты в классе CTests в пространстве имен N.Tests.

Тривиально тестировать закрытые классы.(Обычный рефрен в TDD заключается в том, что вы не должны проходить модульное тестирование частных пользователей; я согласен. Здесь я говорю о internal классах и internal членах.)

Мне не нужножонглируйте как можно большим количеством сборок.

Я должен добавить, что я не против отправить мои юнит-тесты моим пользователям.Было бы иначе, если бы они загружали по коммутируемому каналу или работали в системах с минимальным объемом памяти.

В стороне:

Если бы я мог, я бы поставил свои модульные тесты ввложенный класс, например:

public class C
{
    // note 'private' accessibility. 
    [TestFixture]
    class Tests
    {
        // tests here
    }

    // Implementation of C here
}

Некоторые преимущества:

  • Переименование C не требует переименования CTests.

  • Я точно знаю, где найти мои тесты.

  • Тест и тестируемый код всегда вместе.

Это работает только если ваши классы маленькие.Как только они становятся большими, файл становится огромным.Можно использовать partial классы, чтобы поместить их в отдельные файлы.

К сожалению, среда модульного тестирования в NUnit и Visual Studio не видит закрытые тестовые фиксации.Я не верю, что есть преимущество в том, чтобы исключать закрытые тесты, но именно так они и работают.

0 голосов
/ 11 ноября 2010

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

Единственная проблема, о которой я могу думать, когдаВыделение модульных тестов в отдельном проекте заключается в том, что в зависимости от используемого вами языка может быть сложно тестировать чисто внутренние классы.Для текущего проекта C ++ я использую отдельный проект с определенной конфигурацией сборки «модульных тестов», в которой мой продукт создается как статическая библиотека вместо dll, что позволяет тестовому проекту получить доступ к любому типу или функции независимо от егоэкспортные спецификации.

...