2009-12-11 4 views
0

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

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

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

+8

Почему вы не хотите полагаться на какой-либо сторонний модуль тестирования модулей? –

+4

И я хотел бы сделать тост, но без тостера. –

+0

@Gregory: В основном потому, что я хотел бы уменьшить зависимость кода от другой сторонней структуры до минимума. Это справедливо как для производственного кода, так и для кода модульного тестирования. Если я использую версию Visual Studio с встроенной модуляцией тестирования, я бы не стал ее использовать. – Lopper

ответ

7

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

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

+5

+1, предлагая использовать надлежащую модульную тестовую структуру. Моя личная рекомендация будет xUnit.NET. –

+0

Каков наилучший способ определения константы отладки для конкретного проекта? – Lopper

+0

Я расширил ответ, объяснив это. – Konamiman

0

Вы можете использовать Debug.Assert (или Trace.Assert) в конфигурации Release. За дополнительной информацией обратитесь к статье this.

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

1

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

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

// C#

IfNDef DEBUG

//Unit test 

конец, если

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

//Финансовый директор г NUnit

если! DEBUG

[Ignore("Only valid for release")] 

конец, если

0

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

2

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

Используйте стороннюю структуру.

Смежные вопросы