문제

Silverlight Unit Test Framework has an [Asynchronous] attribute (AsynchronousAttribute) that causes the tests to only end when EnqueueTestComplete() gets called. This allows for a simple way to write tests that need to wait for an event to occur before they end. Now I am trying to pick a favorite general purpose unit test framework out of the ones that seem to be the most popular choices - VSUTF, NUnit, xUnit.NET, MbUnit and I was wondering - how you would do asynchronous testing using these frameworks?

I suppose I can roll out out some custom code that will do Monitor.Wait or ResetEventWaitOne and call it at the end of the test method, then do a Pulse/Set when the test is over, but I was looking if there is an existing common/built-in solution.

This is a sample of how it is done in SUT (from 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

Visual Studio now supports tests that have the async Task signature and the tests complete when the async method completes.

다른 팁

Christopher Bennage has an interesting approach to this, inspired by Caliburn Micro:

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top