【问题标题】:How to test callbacks with NUnit如何使用 NUnit 测试回调
【发布时间】:2010-08-20 19:09:05
【问题描述】:

用 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;
}

【问题讨论】:

    标签: c# unit-testing delegates nunit callback


    【解决方案1】:

    如果您使用 lambda 表达式,您可以避免使用私有字段,这就是我通常这样做的方式。

    [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);
    }
    

    它使您的测试更具凝聚力,并且在任何测试类中包含字段总是会带来灾难!

    【讨论】:

    • 我还是更喜欢将处理程序和状态放在另一个类上。虽然 lambda 和局部变量消除了对字段的需求,但它仍然使测试方法有点混乱。
    • 我喜欢这种情况下的 lambda 表达式,因为您不会使用单独的回调方法污染您的测试类,这些方法实际上并不适合测试类。也许更复杂的睾丸可能会使用自己的 Mike 类,但是我想不出一个案例是否有意义。
    【解决方案2】:

    据我所知,NUnit 没有什么特别之处。我以与您相同的方式测试这些东西。我确实倾向于将回调方法和它存储的状态放在另一个类中。我认为它使它更干净一些,但并没有根本的不同。

    【讨论】:

      【解决方案3】:

      从您的示例中,我无法确切说明您要做什么,但是,NUnit 没有提供任何特定的方法来测试这种事情,但是这个链接应该为您提供一些关于如何开始的想法单元测试异步代码:Unit Testing Asynchronous code

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        • 2012-11-19
        • 2012-04-01
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 2010-12-31
        相关资源
        最近更新 更多