2

StoryQ を使用して、例外が予想されるシナリオをテストするにはどうすればよいですか?

4

2 に答える 2

4

実際のコードに関する限り、テスト コードの部分で、テスト対象を確立するためにor.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!");
于 2011-03-01T01:44:43.733 に答える
3

BDD シナリオ フレームワークは、ユーザーの観点からシステムの動作を記述します。例外がスローされたとき、ユーザーには何が表示されますか? メッセージ?メッセージボックス?

例外がどのように表示されるかを理解できれば、シナリオを書くのに役立つかもしれません。

于 2010-12-03T08:56:18.923 に答える