c# - 如何使用 NUnit 测试回调

标签 c# unit-testing delegates nunit callback

用NUnit来测试回调有什么特别的支持吗?或者某种比我下面的解决方案更好的“最佳实践”?

我刚刚开始编写一些测试和方法,所以我仍然可以完全控制 - 但是我认为如果有更好的方法来彻底测试回调可能会很烦人,尤其是在复杂性增加的情况下。所以这是我现在正在测试的一个简单示例:

要测试的方法使用委托(delegate)调用回调函数,例如,一旦在流中发现新的 xml 元素。出于测试目的,我将 NewElementCallback 方法传递给委托(delegate),并在调用函数时将参数内容存储在一些测试类属性中。这些属性我用于断言。 (当然他们正在测试设置中被重置)

[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 表达式,您可以避免对私有(private)字段的需要,这就是我通常这样做的方式。

[Test]
public void NewElement()
{
    String xmlString = @"<elem></elem>";
    string elementName;
    int elementDepth;

    this.xml.InputStream = new StringReader(xmlString);
    this.xml.NewElement += (name,depth) => { elementName = name; elementDepth = depth };

    this.xml.Start();

    Assert.AreEqual("elem", elementName);
    Assert.AreEqual(0, elementDepth);
}

它使您的测试更具凝聚力,并且在任何测试类上都有字段总是自找麻烦!

关于c# - 如何使用 NUnit 测试回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3534069/

相关文章:

c# - 为什么当我使用 Invoke 方法时编译正常,而当我直接返回 Func<int,int> 时编译不正常?

ios - 无需委托(delegate)即可获取 UITextView 文本

objective-c - 如何在sharekit中处理 “sendDidFinish”

c# - 尝试比较 C# 中的字符

c# - 多进程访问Cache时是否需要线程安全(Redis)

javascript - 警告 - 未处理的 promise 拒绝 : Can't set headers after they are sent

postgresql - 测试后 docker-compose 退出 depends_on 服务

C# linq查询数据表take方法

c# - 为什么 name 在当前的速记成员初始化上下文中不存在?

matlab - 将抽象常量属性分配给模拟