Как программно игнорировать некоторые приемочные тесты с помощью TechTalk.SpecFlow и C#?
у меня есть несколько файлов с некоторых сценариях. Мне нужно игнорировать несколько сценариев или функций, отмеченных некоторыми @tag
в зависимости от некоторого условия. Я читал документация specflow но не нашел там то, что может быть полезно для моего решения. Я хочу использовать что-то вроде
[BeforeScenario("sometag")]
public static void BeforeScenario()
{
if(IgnoreTests)
{
// This is the hot spot
Scenario.DoSomethingToIgnoreScenarioIfConditionButRunScenarioIfConditionFalse();
}
}
также я попытался динамически добавлять или удалять теги
[BeforeScenario("sometag")]
public static void BeforeScenario()
{
if(IgnoreTests)
{
ScenarioContext.Current.ScenarioInfo.Tags.ToList().Add("ignore");
}
}
но это не сработало. Может быть, есть какой-то другой способ динамически добавлять или удалять теги? Или некоторые методы в ScenarioContext
класс, который будет игнорировать текущий сценарий?
1 ответов
у вас есть по крайней мере 3 варианта:
-
настроить Specflow для обработки ожидающих шагов как игнорировать с
missingOrPendingStepsOutcome="Ignore"
тогда можно написать:if(IgnoreTests) { ScenarioContext.Current.Pending(); }
это, возможно, не то, что вы хотите в зависимости от ваших требований для ожидающих шагов.
-
используйте встроенную платформу модульного тестирования, чтобы игнорировать тест во время выполнения. Поэтому, если вы используете, например, NUnit, то с Assert.Ignore ():
if(IgnoreTests) { Assert.Ignore(); }
Я думаю, что это самое чистое / простое решение.
-
или если вы хотите сделать это тестовым фреймворком-агностическим способом, и вы не боитесь возиться с внутренними элементами Specflow, тогда вы можете использовать
IUnitTestRuntimeProvider
интерфейс:if (IgnoreTests) { var unitTestRuntimeProvider = (IUnitTestRuntimeProvider) ScenarioContext.Current .GetBindingInstance((typeof (IUnitTestRuntimeProvider))); unitTestRuntimeProvider.TestIgnore("ignored"); }
это будет работать, даже если вы измените свой модуль testprovider, но это не гарантирует, что этот API не сломается в функции.