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();
});
}
}
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With