如何使用NUnit测试异步方法

7
如何使用nunit测试异步方法?

3
你遇到了什么问题?你只需要测试并检查它们正在做的事情。我的意思是,无论如何你都需要等待,只是看看是否可以让它通知你,这样你就不需要轮询了。可能有可能没有。 - Noon Silk
1
如何使用NUnit测试异步方法,最终可能还要使用其他框架的测试? - chwarr
一个只有7个单词且没有研究努力的问题能得到5个赞?_如何提出好问题?_。我很嫉妒 ;) - user585968
这个回答解决了你的问题吗?如何使用NUnit(或可能是其他框架)测试异步方法? - ggorlen
2个回答

3
如果您拥有.NET版本5的C#编译器,那么您可以使用新的async和await关键字。链接如下:http://simoneb.github.io/blog/2013/01/19/async-support-in-nunit/ 如果您可以使用带有匿名lambda函数的闭包,并使用线程同步。
例如:
[TestFixture]
class SomeTests
{
    [Test]
    public void AsyncTest()
    {
        var autoEvent = new AutoResetEvent(false); // initialize to false

        var Some = new Some();
        Some.AsyncFunction(e =>
        {
            Assert.True(e.Result);
            autoEvent.Set(); // event set
        });
        autoEvent.WaitOne(); // wait until event set
    }

}

2
你可以使用NUnits Delayed Constraint
[TestFixture]
class SomeTests
{
    [Test]
    public void AsyncTest()
    {
        var result = false;
        var Some = new Some();
        Some.AsyncFunction(e =>
        {
            result = e.Result;
        });

        Assert.That(() => result, Is.True.After(1).Minutes.PollEvery(500).MilliSeconds);
    }

}

这个例子是针对NUnit 3.6的,但早期版本也支持Delayed Constraint,但要查找语法不同。

StackOverflow不应该允许没有解释的负评。请在进行负评时解释原因,这有助于我们共同学习。 - Daryn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接