Как скрыть модульные тесты 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 ответа

Решение

Объединяя ответы:

  1. Вы ДЕЙСТВИТЕЛЬНО хотите использовать юнит-тесты как эксперименты? (комментарий Jamie Rees и CodeTherapist в ответ)

    Возможно, Linqpad ([ https://www.linqpad.net/]) или что-то подобное лучше для экспериментов.

  2. Если вы хотите использовать юнит-тесты, пометьте каждый метод эксперимента [TestCategory], Это позволяет группировать эксперименты в тестовом проводнике и выбирать, какие тесты запускать. (Из ответа CodeTherapist)

  3. Используйте конфигурацию сборки для определения условного символа компиляции, например 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) также можно определить через свойства проекта. Чтобы улучшить это, создайте конфигурацию сборки и конфигурацию решения и определите условные символы компиляции только для конфигурации сборки.

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