当您使用NUnit测试回调函数时有没有特别的支持?或者某种“最佳做法”比我的解决方案更好?如何使用NUnit测试回调函数
我刚开始编写一些测试和方法,所以我仍然完全控制 - 但是我认为如果有更好的方法来彻底测试回调,特别是在复杂度增加的时候,可能会很烦人。所以这是我现在正在测试的一个简单示例:
要测试的方法使用委托,该委托调用回调函数,例如一旦在流中发现新的xml元素。出于测试目的,我将NewElementCallback
方法传递给委托,并在调用函数时将参数内容存储在某些测试类属性中。这些属性用于断言。 (当然,它们在测试设置中被重置)
[Test]
public void NewElement()
{
String xmlString = @"<elem></elem>";
this.xml.InputStream = new StringReader(xmlString);
this.xml.NewElement += this.NewElementCallback;
this.xml.Start();
Assert.AreEqual("elem", this.elementName);
Assert.AreEqual(0, this.elementDepth);
}
private void NewElementCallback(string elementName, int elementDepth)
{
this.elementName = elementName;
this.elementDepth = elementDepth;
}
我仍然喜欢把处理程序和状态放在另一个类上。虽然lambda和局部变量不需要字段,但它仍然使测试方法有点混乱。 – 2010-08-20 19:48:05
在这种情况下,我喜欢lambda表达式,因为您不会使用单独的回调方法污染您的测试类,而这些方法实际上并不适合测试类。也许更复杂的睾丸可能会利用自己的类迈克,但我不能想到的情况下,这是有道理的呢。 – Alex 2010-08-21 05:12:10