c# - 在 EventHandler 中对发送者对象进行单元测试

标签 c# .net unit-testing nunit moq

假设我有一个这样的事件处理程序:

public SomethingHappended_Handler(object sender, EventArgs e)
{
  var myobj = sender as MyClass();
  myobj.DoSomethingImportant();
}

如何测试 myObj 是 MyClass 的类型?我知道发件人将永远属于 MyClass,但我只是认为为了安全起见,我需要一个:

if (myObj != null) //Close it

如果类型不是 MyClass,则 myObj 将为空。据我所知,测试非空值的最佳方法是如何创建一个单元测试来证明如果我发送一个不同于 MyClass 的类型作为发件人,它将放弃调用 DoSomethingImportant,因此我需要空值检查?

最佳答案

我可以用伪代码回答你,指出你可以做什么。

首先,您可以检查 sender 是否属于 MyClass 类型。

if(sender is MyClass)

然后在您的单元测试中,您可以发送两个模拟对象,一个类型为 MyClass,另一个类型为“MyClassFake”。使接口(interface)既使用又实现 Close() 方法。

做两个单元测试:

  1. 验证调用了 MyClass.Close()。
  2. 验证 MyClassFake.Close() 从未被调用。

Close() 只是一个例子,如果你有其他方法,你可以测试调用/不调用它们。

关于c# - 在 EventHandler 中对发送者对象进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9395078/

相关文章:

C#函数无法返回——阻止编译器警告

c# - 使用 asp.net mvc 进行依赖注入(inject)

java - 我可以在实例化时设置一个带有期望(验证)的 Mockito 模拟吗?

c# - 表达式引用了不属于 ISearchIndexClient.Documents.Search 方法的模拟对象的方法

c# - Windows 窗体 : Change application mainwindow at runtime

java - 使用 aws lambda c# 裁剪图像(使用 Java 解决)

c# - 验证多个控件 Asp.Net

ios - Swift:基类数组不调用子类函数实现

c# - 是否有现有的 C# 扩展方法库?或分享你自己的

在另一个应用程序域中执行代码的 C# 代码?