【发布时间】:2012-04-09 22:14:56
【问题描述】:
我们如何使用 StoryQ 来测试预期会出现异常的场景?
【问题讨论】:
我们如何使用 StoryQ 来测试预期会出现异常的场景?
【问题讨论】:
就实际代码而言,在测试代码的.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!");
【讨论】:
BDD 场景框架从用户的角度描述系统的行为。抛出异常时用户会看到什么?一个消息?消息框?
如果你能弄清楚异常是如何被看到的,它可能会帮助你编写场景。
【讨论】: