想知道这是否是用事件测试结果的正确方法。
我正在开发一个应用程序,当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"});
}
我不喜欢的是,如果你明白我的意思,我之前就断言了。
我希望断言在视觉上最后。顺便说一句,上面的工作很好,但不太开心。
有什么建议吗?
答案 0 :(得分: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);
}
编辑:添加了亚历山大的建议。