Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Silverlight Testing Using async await Syntax

0.00/5 (No votes)
20 Dec 2011 1  
Silverlight testing using async await syntax

This is going to be my first blog post. I intend to blog a bit when I’ve something intresting to share about coding, mostly in C#. Recently, I came across an interesting post on the blog of ayende about testing in Silverlight. When testing code which makes asynchronous calls, Microsoft gave us the enqueuecallback method shown below:

1 [TestMethod]        
2 [Asynchronous]        
3 public void OldWay()        
4 {            
5    var something = SomeTestTask.DoSomethingAsync();            
6    EnqueueConditional((() => 7        something.IsCompleted || 
8        something.IsFaulted));            
9    EnqueueCallback(() => 10    {            
11        var another = SomeTestTask.DoSomethingAsync();                
12        EnqueueConditional((() => 13            another.IsCompleted || 
14            another.IsFaulted));                
15        EnqueueCallback(() => 16        {                    
17            EnqueueDelay(100);                    
18            Assert.AreEqual(42, another.Result);                    
19            EnqueueTestComplete();
20        });            
21    });        
22 }

Bennage helped out here as described in his blog post to allow us the following syntax:

1 [TestMethod]
2 [Asynchronous]        
3 public IEnumerable<Task> NewWay()        
4 {            
5    var something = SomeTestTask.DoSomethingAsync();
6 yield return something;            
7    var another = SomeTestTask.DoSomethingAsync();
8 yield return another;            
9 yield return Delay(100);            
10 Assert.AreEqual(42, another.Result);        
11 }

In my opinion, this is much more readable. Now, Microsoft has the new Async CTP library. We can however go one step further, by using the the async/await syntax. I’ve made a small modification to the library created by Bennage that allows the syntax below:

1 [TestMethod]
2 [Asynchronous]
3 public async Task AnotherWay()        
4 {
5    await SomeTestTask.DoSomethingAsync();            
6 int result = await SomeTestTask.DoSomethingAsync(); 
				7    await Delay(100);            
8    Assert.AreEqual(42, result);        
9 }

The code to do this can be found on github.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here