Сценарий StoryQ, где ожидается исключение - PullRequest
2 голосов
/ 25 ноября 2010

Как мы используем StoryQ для тестирования сценария, где ожидается исключение?

Ответы [ 2 ]

4 голосов
/ 01 марта 2011

Что касается действительного кода, в части .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!");
3 голосов
/ 03 декабря 2010

Сценарии BDD описывают поведение системы с точки зрения пользователя. Что увидит пользователь, когда возникнет исключение? Сообщение? Окно сообщения?

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

...