Мое решение включает в себя пару пунктов для реализации, но в самом конце оно будет выглядеть намного элегантнее:
@CatchException
Scenario: Faulty operation throws exception
Given Some Context
When Some faulty operation invoked
Then Exception thrown with type 'ValidationException' and message 'Validation failed'
Чтобы это сработало, выполните следующие 3 шага:
Шаг 1
Отметьте сценарии, в которых вы ожидаете исключения, с помощью некоторого тега, например. @CatchException
:
@CatchException
Scenario: ...
Шаг 2
Определите обработчик AfterStep
, чтобы изменить ScenarioContext.TestStatus
на OK
. Вы можете захотеть игнорировать ошибки только для шагов Когда, чтобы вы все равно могли провалить тест в Затем, проверяя исключение. Пришлось сделать это через отражение, так как свойство TestStatus
является внутренним:
[AfterStep("CatchException")]
public void CatchException()
{
if (ScenarioContext.Current.StepContext.StepInfo.StepDefinitionType == StepDefinitionType.When)
{
PropertyInfo testStatusProperty = typeof(ScenarioContext).GetProperty("TestStatus", BindingFlags.NonPublic | BindingFlags.Instance);
testStatusProperty.SetValue(ScenarioContext.Current, TestStatus.OK);
}
}
Шаг 3
Подтвердите TestError
так же, как вы бы проверили что-либо в пределах ScenarioContext
.
[Then(@"Exception thrown with type '(.*)' and message '(.*)'")]
public void ThenExceptionThrown(string type, string message)
{
Assert.AreEqual(type, ScenarioContext.Current.TestError.GetType().Name);
Assert.AreEqual(message, ScenarioContext.Current.TestError.Message);
}
person
Vitaliy Ulantikov
schedule
15.02.2017
When
доThen
. - person Roger Lipscombe   schedule 28.09.2011