Передайте аргумент или опцию для модульных тестов из VSTest.Console.exe - PullRequest
2 голосов
/ 28 июня 2019

Я могу успешно запустить модульные тесты VS из командной строки (и, следовательно, из сборки на компьютере сборки).

VSTest.Console.EXE "MyTest.dll" /logger:trx /platform:x64 /inIsolation

Я также могу отфильтровать любые обязательные тесты, которые я не хочу выполнять в определенной среде, с опцией /TestCaseFilter:

VSTest.Console.EXE "MyTest.dll" /TestCaseFilter:Name!=Verify_DigitallySigned

Это необходимо для , а не для запуска проверки (проверок с цифровой подписью).

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

Однако я хочу сообщить модульному тесту, если определенные тесты (утверждения) не требуются. Например, передав аргумент "/DontTestSigning". Таким образом, модульные тесты (написанные на C ++ или C #) увидят такой параметр / опцию и не будут делать дополнительных утверждений, предотвращая тем самым сбои сборки в нереальных производственных сборках (например, в сборках PR).

Я вижу, что есть опция /testsettings с VSTest.Console.exe (и с MSTest.exe также), но я не уверен, как (IF) это можно применить и разрешить фактическое проверить функции, чтобы узнать о некоторой опции "не делать".

Ответы [ 2 ]

3 голосов
/ 28 июня 2019

Обычно вы предпочитаете, чтобы в вашем тесте был только один Assert, чтобы каждый тест проверял одну единственную вещь .

Так что у вас похоже на это, я полагаю:

[Test]
public void MyTest()
{
    Assert.That(...);
    Assert.That(...);
    Assert.That(...);
}

Если вы хотите исключить, например, второй Assert, вы, конечно, должны предоставить некоторую функциональность в своем коде , чтобы выполнять или не выполнять эти строки, например ::

public void MyTest()
{
    Assert.That(...);
    if(executeSecondAssert)
        Assert.That(...);
    Assert.That(...);
}

Вы можете ввести некий параметр компиляции, который устанавливает значение для указанного выше флага bool:

#if(EXECUTE_ASSERT)
    bool executeSecondAssert = true;
#else
    bool executeSecondAssert = false;

и теперь предоставьте этот переключатель компиляции через переменную окружения.

2 голосов
/ 02 июля 2019

Вы также можете предоставить .runsettings-файл процессу vstest.console, как указано здесь.https://docs.microsoft.com/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file?view=vs-2019.

Для обеспечения пользовательских параметров измените раздел TestRunParameters, например:

<!-- Parameters used by tests at runtime -->
<TestRunParameters>
  <Parameter name="executeAsserts" value="1,2,3" />
</TestRunParameters>

Эти параметры теперь доступны через этот код:

TestContext.Properties["executeAsserts"];

, чтобы ваш окончательный код теста выглядел так:

[Test]
public void MyTest()
{
    var assertsToRun = TestContext.Properties["executeAsserts"].Split(",").Select(x => Convert.ToInt(x)).ToArray();
    if(assertsToRun.Contains(1)
        Assert.That(...);
    if(assertsToRun.Contains(2)
        Assert.That(...);
    if(assertsToRun.Contains(3)
        Assert.That(...);
}

Вы сможете выполнить тест с помощью следующей команды:

vstest.console.exe MyTestAssembly.dll /Settings:MySettings.runsettings
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...