NUnit 断言事件 .任何建议

本文关键字:任何建 事件 断言 NUnit | 更新日期: 2023-09-27 17:56:17

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

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

为了测试它,我想出了以下内容(虚构的场景)。我想知道这是否是你这样做的方式:

[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"});
}
我不喜欢的是,

如果你明白我的意思,我之前就断言了。

我希望断言在视觉上是最后的。顺便说一下,上面工作得很好,但不太满意。

有什么建议吗?

NUnit 断言事件 .任何建议

看起来不错,但您应该将收到的参数(或任何其他检查)存储在变量中,以保持排列/行动/断言序列。这样,您还可以断言事件实际上已触发,而您的示例不会验证这一点。

[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);
}

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