VSUTF,NUnit,xUnit.NET,MbUnit与SUTF中的异步测试?

时间:2012-01-01 01:21:36

标签: c# nunit mstest mbunit xunit.net

Silverlight Unit Test Framework有一个[Asynchronous]属性(AsynchronousAttribute),它导致测试仅在EnqueueTestComplete()被调用时结束。这允许一种简单的方法来编写需要在事件结束之前等待事件发生的测试。现在我试图从那些似乎是最受欢迎的选择中选择一个最喜欢的通用单元测试框架 - VSUTF,NUnit,xUnit.NET,MbUnit和我想知道 - 你将如何使用这些框架进行异步测试?

我想我可以推出一些自定义代码,它们会执行Monitor.Wait或ResetEventWaitOne并在测试方法结束时调用它,然后在测试结束时执行Pulse / Set,但我在寻找是否有是现有的通用/内置解决方案。

这是一个如何在SUT中完成的示例(来自http://smartypantscoding.com/a-cheat-sheet-for-unit-testing-silverlight-apps-on-windows-phone-7)。

[TestClass]
public class AsyncTests : SilverlightTest
{
    [Asynchronous]
    [TestMethod]
    public void AsyncAppendStringTest()
    {
        var appendStrings = new List<string>() { "hello", "there" };

        StringJoiner.AsyncAppendStringsWithDashes(appendStrings, (returnString) =>
            {
                Assert.IsTrue(string.Compare(returnString, "hello-there") == 0);
                EnqueueTestComplete();
            });
    }
}

2 个答案:

答案 0 :(得分:1)

Christopher Bennage对此有一个有趣的方法,受到Caliburn Micro的启发:

http://devlicio.us/blogs/christopher_bennage/archive/2011/01/17/improving-asynchronous-tests-for-silverlight.aspx

答案 1 :(得分:1)

Visual Studio现在支持具有async Task签名且在异步方法完成时完成测试的测试。