Question

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();
            });
    }
}
Was it helpful?

Solution 2

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

OTHER TIPS

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top