65.9K
CodeProject is changing. Read more.
Home

Silverlight Testing Using async await Syntax

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0 vote)

Dec 19, 2011

CPOL
viewsIcon

14411

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.