单元在EventHandler中测试发件人对象

时间:2012-02-22 12:49:09

标签: 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将为null。我知道最好测试not null我怎么能创建一个单元测试来证明如果我发送一个不同的类型作为发送者而不是MyClass它将不会调用DoSomethingImportant,因此我需要空检查?

1 个答案:

答案 0 :(得分:4)

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

首先,您可以检查发件人是否为MyClass类型。

if(sender is MyClass)

然后在你的unittest中你可以发送两个模拟对象,一个是MyClass类型,另一个是MyClassFake类型。使一个接口都使用并使它们实现Close()方法。

进行两次单元测试:

  1. 验证是否调用了MyClass.Close()。
  2. 验证永远不会调用MyClassFake.Close()。
  3. Close()只是一个例子,如果你有其他方法,你可以测试被调用/不被调用。