NUnit断言事件.任何建议?

use*_*969 3 c# nunit unit-testing

想知道这是否是用事件测试结果的正确方法.

我正在开发一个应用程序,当Save正在进行/完成时它会触发事件.

为了测试它,我想出了以下内容(制作场景).我想知道这是不是你这样做的方式:

[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"});
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢的是,如果你明白我的意思,我之前就断言了.

我希望断言在视觉上最后.顺便说一下,上面的工作很好,但不太开心.

有什么建议?

ist*_*iuk 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);
}
Run Code Online (Sandbox Code Playgroud)

编辑:添加亚历山大的建议.