С#: модульное тестирование без использования сторонней среды?

Должно ли модульное тестирование выполняться в режиме отладки или в режиме выпуска?

Я использую Visual Studio Standard Edition 2005, которая не поставляется с какой-либо структурой модульного тестирования. Поскольку я также не хочу использовать какую-либо другую стороннюю среду модульного тестирования, я использовал Debug.Assert для выполнения фактического теста во всех методах модульного тестирования. Однако Debug.Assert работает только в режиме отладки.

Есть ли эквивалент в режиме выпуска или есть какая-то другая альтернатива (без использования сторонних инструментов)?


person Lopper    schedule 11.12.2009    source источник
comment
почему вы не хотите полагаться на какую-либо стороннюю среду модульного тестирования?   -  person Gregory Pakosz    schedule 11.12.2009
comment
И я хотел бы сделать тост, но без тостера.   -  person Wim Hollebrandse    schedule 11.12.2009
comment
@Gregory: В основном потому, что я хотел бы свести к минимуму зависимость кода от других сторонних фреймворков. Это верно как для производственного кода, так и для кода модульного тестирования. Если я использую версию Visual Studio со встроенной структурой модульного тестирования, я бы не возражал против ее использования.   -  person Lopper    schedule 11.12.2009
comment
@Lopper В нашей профессии очень принято, что нам нужны сторонние библиотеки для вещей, которые мы не хотим / не должны создавать сами. Вот и весь аргумент повторного использования. Звучит как случай синдрома «изобретено не здесь».   -  person Wim Hollebrandse    schedule 11.12.2009
comment
Ты слишком осторожен. NUnit испытан и протестирован. Создание собственной среды модульного тестирования — не лучший вариант использования вашего времени. Также не имеет значения, запускаете ли вы тесты с отладкой/выпуском, для данного моментального снимка кода и тестов результаты должны быть согласованными.   -  person Gishu    schedule 11.12.2009


Ответы (5)


Знаете ли вы, что вы можете определить константу DEBUG в любой конфигурации проекта? (в Visual Studio, Свойства проекта — Сборка — Определить символ DEBUG). Или вы можете определить пользовательскую константу TEST (Свойства проекта — Сборка — Символы условной компиляции) и создать методы тестирования, которые запускаются только при определении этой константы, с помощью условный атрибут.

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

person Konamiman    schedule 11.12.2009
comment
+1 за предложение использовать правильную структуру модульного тестирования. Моей личной рекомендацией будет xUnit.NET. - person Mark Seemann; 11.12.2009
comment
Как лучше всего определить константу отладки для конкретного проекта? - person Lopper; 11.12.2009
comment
Я расширил ответ, объясняя это. - person Konamiman; 11.12.2009

Не злоупотребляйте и не разделяйте Trace.Assert или Debug.Assert в целях модульного тестирования.

Используйте сторонний фреймворк.

person Wim Hollebrandse    schedule 11.12.2009

http://blogs.msdn.com/billbar/pages/features-and-behavior-of-load-tests-content-unit-tests-in-vsts-2008.aspx

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

//C#

ifndef ОТЛАДКА

//Unit test

конец, если

Возможно для вашей ситуации

//C# - для NUnit

если !ОТЛАДКА

[Ignore("Only valid for release")] 

конец, если

person bala3569    schedule 11.12.2009

На самом деле вы можете использовать Debug.Assert (или Trace.Assert) в конфигурации Release. Дополнительные сведения см. в этой статье на сайте MSDN.

Лично я не вижу проблемы с запуском модульных тестов в конфигурации отладки. Модульные тесты обычно нацелены на такие вещи, как логика, а не на элементы, на которые влияет выпуск или отладка, например производительность.

person popester    schedule 11.12.2009

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

person AutomatedTester    schedule 11.12.2009