【问题标题】:StoryQ scenario where exception is expected预期异常的 StoryQ 场景
【发布时间】:2012-04-09 22:14:56
【问题描述】:

我们如何使用 StoryQ 来测试预期会出现异常的场景?

【问题讨论】:

    标签: bdd storyq


    【解决方案1】:

    就实际代码而言,在测试代码的.Then 部分,您需要创建ActionFunc 来确定要测试的内容,然后在.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!");
    

    【讨论】:

      【解决方案2】:

      BDD 场景框架从用户的角度描述系统的行为。抛出异常时用户会看到什么?一个消息?消息框?

      如果你能弄清楚异常是如何被看到的,它可能会帮助你编写场景。

      【讨论】:

      • 我目前正在开发一个在单元测试中使用 StoryQ 的平台,在该平台上抛出异常是完全有效的。虽然 StoryQ 是为 BDD、最终用户观点、功能测试而设计的,但它也可以重新用于其他类型的测试。
      • 我仍然会尽可能使用客户的语言,即使实际实现涉及抛出异常。 (您是否考虑过传入异常处理程序?)
      • 单元测试场景中没有客户。看我的问答here
      • @gregsdennis 总有一个客户。在这里查看我的问答。 stackoverflow.com/a/3264037/363592
      • 如果我正在测试存储库之类的东西,抛出异常是一个有效的场景,需要进行测试。存储库没有直接客户。有一个消费者,但该消费者应该能够预测并正确处理来自 SUT 的预期异常。我同意客户(最终用户)永远不会看到未处理的异常。
      猜你喜欢
      • 2013-08-09
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 2011-03-25
      • 2014-07-21
      • 1970-01-01
      相关资源
      最近更新 更多