Как скрыть модульные тесты C#?
Для быстрых экспериментов я предпочитаю использовать "модульные тесты", то есть аннотировать один (или более) метод с помощью [TestMethod]
- над созданием крошечного проекта с Main
метод.
Метод тестирования имеет некоторые преимущества перед крошечным проектом:
- быстрее написать метод и аннотировать его
[TestMethod]
чем создать новый проект; - метод испытания может использовать средства, предоставляемые средствами визуального тестирования студии, такими как испытательные приборы, используемые в аналогичных экспериментах (через
[TestInitialize]
); - метод можно выполнить, щелкнув правой кнопкой мыши и выбрав "Run test" (в visual studio 2015); а также,
- с помощью
Assert()
вместо проверки значения через отладчик или черезConsole.WriteLine()
автоматически документирует цель и результаты эксперимента и делает его повторяемым без ручного вмешательства.
Проблема состоит в том, что эти эксперименты отображаются в визуальном тестовом редакторе студии, что вызывает беспорядок и затрудняет отличение реальных модульных тестов от экспериментов. (Я не использую никаких других инструментов отчетов тестирования, CI и т. Д., Но я предполагаю, что проблема также возникнет там.)
Есть ли способ иметь преимущества использования [TestMethod]
для экспериментов и избежать беспорядка, который он вызывает в то же время?
Я попытался следующее, чтобы решить эту проблему:
Есть
[TestClass]
и[TestMethod]
атрибуты в качестве комментариев и раскомментируйте их, когда вы хотите запустить эксперимент.Это то, чем я сейчас занимаюсь. Это работает, но проведение эксперимента несколько обременительно.
использование
[Ignore]
приписывать.Загромождает представление обозревателя тестов игнорируемыми тестами и требует комментирования
[Ignore]
атрибут для запуска теста.Ставить эксперименты в другой проект; как предложено Veverke или аннотировать тест с
[TestCategory]
атрибут, как предложено CodeTherapist.Исследователь визуальных студий может группировать тесты по классу, продолжительности, результату, характеристикам, проекту. Чтобы избежать беспорядка: выбор признаков позволяет сохранить дерево тестов с пометкой
[TestCategory("Experiments")]
закрытый или выбор проектов позволяет сохранить дерево "эксперименты.проект" закрытым.При использовании группировки для отличия экспериментов от тестов другие группы в обозревателе тестов использовать нельзя.
TL; DR
Как писать эксперименты (используя юнит-тесты Visual Studio), не перегружая отчеты о реальных юнит-тестах?
3 ответа
Объединяя ответы:
Вы ДЕЙСТВИТЕЛЬНО хотите использовать юнит-тесты как эксперименты? (комментарий Jamie Rees и CodeTherapist в ответ)
Возможно, Linqpad ([ https://www.linqpad.net/]) или что-то подобное лучше для экспериментов.
Если вы хотите использовать юнит-тесты, пометьте каждый метод эксперимента
[TestCategory]
, Это позволяет группировать эксперименты в тестовом проводнике и выбирать, какие тесты запускать. (Из ответа CodeTherapist)Используйте конфигурацию сборки для определения условного символа компиляции, например
EXPERIMENTS
, использование#if EXPERIMENTS
включить или отключить эксперименты. Используйте конфигурацию сборки решения, чтобы иметь возможность включать или отключать эксперименты на панели инструментов.(Из ответа Kasper van den Berg
Пример:
#if EXPERIMENTS
[TestClass]
public class MyExperiment1
{
[TestMethod, TestCategory("Experiment")]
public void Method1()
{
…
}
}
#endif
По сути, вы неправильно используете юнит-тесты для чего-то, для чего оно не было предназначено. Но единственное решение, которое приходит мне в голову - это использовать [TestCategory]
атрибут для контроля, когда тест выполняется и в каком списке он должен быть.
[TestMethod(), TestCategory("Nightly"), TestCategory("Weekly"), TestCategory("ShoppingCart")]
public void DebitTest()
{
}
Эксперименты могут быть отключены через ifdef, например:
#if EXPERIMENTS
[TestClass]
public class MyExperiment1
{
[TestMethod]
public void Method1()
{
…
}
}
#endif
Чтобы включить эксперимент добавить #define EXPERMIMENTS
в качестве первой строки файла; однако, это все еще громоздко. Условный символ компиляции (EXPERIMENTS
) также можно определить через свойства проекта. Чтобы улучшить это, создайте конфигурацию сборки и конфигурацию решения и определите условные символы компиляции только для конфигурации сборки.