Что касается действительного кода, в части .Then
вашего тестового кода вам нужно будет создать Action
или Func
для определения того, что тестируется, затем в части .Then
кода, вы должны вызвать этот код и проверить результат.Так, например:
[Test]
public void AnIllegalOperationThrowsAnException()
{
new Story("My Story)
.InOrderTo("Do achieve something")
.AsA("User")
.IWant("To carry out an operation")
.WithScenario("an exception occurs")
.Given(InitialConditions)
.When(TheIllegalActionIsTaken)
.Then(AnIllegalOperationExceptionIsThrown);
}
private void InitialConditions()
{
}
private Func<string> _operation;
private void TheIllegalActionIsTaken()
{
_operation = () => return MyTestClass.DoesSomethingWrong();
}
private void AnIllegalOperationExceptionIsThrown()
{
try
{
_operation.Invoke();
Assert.Fail("An exception should have been thrown");
}
catch (Exception ex)
{
Assert.That(ex, Is.InstanceOf<IllegalOperationException>(), "The wrong exception was thrown");
Assert.That(ex.Message, Is.EqualTo("Ooops!");
}
}
Обработка утверждений, вероятно, может быть немного приведена в порядок, особенно ваш метод тестирования не возвращает значение.Например, библиотека FluentAssertions может очень хорошо работать с Action (но не с Func), поэтому код будет:
_action.ShouldThrow<IllegalOperationException>().WithMessage("Ooops!");