Monday, October 13, 2014

Async testing with Chill

Let’s face it. Async programming is difficult.

The Async Await certainly helps to make the asynchronous code more readable. Along that lines, Chill attempts to help to make your tests more readable as well.

Assume the following simple example. You have an asynchronous webapi controller. Why is this controller async? Let’s assume it needs to do IO. In this case, this is encapsulated in an async call to ICustomerStore.GetCustomerAsync().

   1: public class When_retrieving_existing_customer_async : 
   2:     GivenSubject<CustomerController, View>
   3: {
   4:     const int customerId = 12;
   5:  
   6:     public When_retrieving_existing_customer_async()
   7:     {
   8:         Given(() =>
   9:         {
  10:             SetThe<Customer>().To(EntityMother.BuildACustomer()
  11:                 .With(x => x.Id = customerId));
  12:  
  13:             // The GetCustomerAsync method needs to return a customer Asynchronously
  14:             // So it needs to return a Task<Customer>. The .Asynchronously() extension
  15:             // method conveniently wraps the customer in a task that returns the Customer for you
  16:             The<ICustomerStore>()
  17:                 .GetCustomerAsync(customerId)
  18:                 .Returns(The<Customer>().Asynchronously());
  19:         });
  20:         // When() also works nicely with asynchronous actions. 
  21:         When(() => Subject.GetAsync(customerId));
  22:     }
  23:  
  24:     [Fact]
  25:     public void Then_view_is_returned()
  26:     {
  27:         // Even though the GetAsync() method returns a Task<View>(), the Result
  28:         // Property is still a View. This allows for easy unit testing. 
  29:         Result.Should().NotBeNull();
  30:     }
  31:  
  32:     [Fact]
  33:     public void Then_model_is_the_existing_custmoer()
  34:     {
  35:         Result.Model.Should().Be(The<Customer>());
  36:     }
  37: }

In Chill, you can just define an asynchronous method in your call to When(). Chill will take care of handling the asynchronous complexity for you. Now all you need to do is to make sure your dependency return a Task instead of the ‘normal’ result. You can do this by calling the .Asynchronously() extension method.

1 comment:

  1. tiếng anh cho người mới bắt đầu
    trung tâm kế toán tại đà nẵng
    học kế toán ở đồng nai

    http://kylin1st.com
    http://cattleyavn.com
    http://kenyseo.com
    Trước tiên dùng châm cứu khống chế toàn bộ vị trí dưới đầu Hi Nhã, Đoạn
    Vân bắt đầu khôi phục các cơ quan quan trọng của Hi Nhã. Đầu tiên phải
    là trái tim, cái này cũng là duyên cớ vì sao lúc vừa rồi Đoạn Vân không
    khâu ngực nàng. Thông qua châm cứu phụ trợ, Đoạn Vân tạm thời làm cho
    trái tim Hi Nhã bắt đầu đập lên; tiếp theo đó cũng chính là hô hấp.

    Sau khi làm cho trái tim đập trở lại, buồng phổi bắt đầu vận hành, Đoạn
    Vân nhanh chóng khâu ngực Hi Nhã lại, đem thân thể hoàn tất chữa trị.
    Tuy nhiên bởi vì Hi Nhã chết đã lâu, nên cơ hồ không có nhiệt độ cơ thể.
    Vì thế mà huyết dịch nàng không thể vận chuyển được! Vì để có thể khiến
    cho huyết dịch nàng một lần nữa tuần hoàn trở lại, nên Đoạn Vân vận dụng
    chân khí dùng phương pháp đẩy lên, làm cho nhiệt độ cơ thể Hi Nhã bình
    thường trở lại trước, sau đó khôi phục năng lực tuần hoàn máu của nàng.

    Làm được bước này, Đoạn Vân cũng cơ bản khiến cho các vị trí dưới đại
    não của Hi Nhã bắt đầu hồi phục! Cái này tương đương với lúc Đoạn Vân
    giải phẫu não cho Tra Lí, làm cho đại não của hắn giống như chết giả.
    Nhưng nơi này không phải chết giả mà là thật sự đã chết, nhưng đạo lý
    cũng đều là giống nhau thôi.

    Lợi dụng ngân châm, Đoạn Vân làm cho một chút công năng của đầu Hi Nhã
    cũng dần dần khôi phục lại. Như vậy,thân thể Hi Nhã cơ bản được sống
    lại. Tuy nhiên Hi Nhã sống lại sẽ mang trong mình một linh hồn đã chết,

    http://ngoduong89.com
    trung tâm dạy kế toán
    http://meomeo007.com
    học kế toán tổng hợp tại huế
    http://01embesexy.com
    http://tradaboho.com
    http://nguoicodanh.net
    http://chotruongyen.com
    http://caubesieunhan.com

    ReplyDelete