3

これがイベントで結果をテストする正しい方法かどうか疑問に思っています。

保存が進行中/完了したときにイベントを発生させるアプリケーションに取り組んでいます。

それをテストするために、私は次のことを考え出しました(構成されたシナリオ)。そして、これがあなたのやり方であるかどうか疑問に思っています:

[Test]
public void Save_WhenCalled_IsSuccessfull()
{
    //Arrange
    var customerService= new CustomerService();

    customerService.OnSaved += (sender, args) =>
        {                                             
            Assert.IsTrue(args.HasSaved);
        };

    customerService.Save(new Customer {Id=1,Name="Jo"});
}

私が気に入らないのは、私の言いたいことがわかるなら、私が前に主張していることです。

アサーションを視覚的に最後にしたいと思います。ところで、上記は問題なく動作しますが、満足できるものではありません。

助言がありますか?

4

1 に答える 1

5

良さそうに見えますが、arrange/act/assert シーケンスを維持するために、受信したパラメーター (またはその他のチェック) を変数に格納する必要があります。そうすれば、イベントが実際に発生したことも主張できますが、これはあなたの例では確認できません。

[Test]
public void Save_WhenCalled_IsSuccessfull()
{
    //Arrange
    YourArgsType actualArgs;
    var customerService= new CustomerService();  
    customerService.OnSaved+= (sender, args) =>
                                  {                                           
                                      actualArgs = args;
                                  };

    //Act
    customerService.Save(new Customer{Id=1, Name="Jo"});

    //Assert
    Assert.IsTrue(actualArgs.HasSaved);
}

編集:アレクサンダーの提案を追加しました。

于 2013-01-27T16:39:45.753 に答える