Monday, October 6, 2014

Introducing Chill, a BDD style testing framework

The last couple of years, I’ve found myself in a position where I had to ‘sell’ unit testing to my colleagues. Most of them weren't familiar with unit testing, but some were downright against it. So, I tried to work on a way that minimized overhead and maximized readability.

Unit testing, when done correctly, is a great technique to improve the quality of your code and to speed up development.  When done incorrectly, it will take all technical debt and cast them in concrete, grinding development speed down.

To overcome this, I’ve worked quite a bit to come up with a set of techniques to Of course, I’m standing on the shoulder of giants here. All I’ve done is to combine several tools, ideas and techniques together into a form that minimizes overhead and maximizes impact.

Here’s an example of my preferred style of tests:

   1: public class When_retrieving_existing_customer : 
   2:     GivenSubject<CustomerController, View>
   3: {
   4:     const int customerId = 12;
   5:  
   6:     public When_retrieving_existing_customer()
   7:     {
   8:         // Explicit phases for setup and test 
   9:         Given(() =>
  10:         {
  11:             // Storage for data used in the test. 
  12:             // No need to create fields or variables. 
  13:             SetThe<Customer>().To(EntityMother.BuildACustomer()
  14:                 .With(x => x.Id = customerId));
  15:  
  16:             // Automatic creating of mock objects using library of choice. 
  17:             // Here using NSubstitute as a friendly mocking framework
  18:             The<ICustomerStore>().GetCustomer(customerId).Returns(The<Customer>());
  19:                     
  20:         });
  21:  
  22:         // Subject under test is created automatically 
  23:         // and accessable via the Subject property
  24:         When(() => Subject.Get(customerId));
  25:     }
  26:  
  27:   
  28:  
  29:     [Fact]
  30:     public void Then_view_is_returned()
  31:     {
  32:         // Result property is created automatically, 
  33:         // if needed and allows type safe access
  34:         Result.Should().NotBeNull();
  35:     }
  36:  
  37:     // Use test framework of choice. Here using XUnit, but NUnit, MsTest works just as well. 
  38:     [Fact]
  39:     public void Then_model_is_the_existing_custmoer()
  40:     {
  41:         // One assert per test. 
  42:         // Combines realy nicely with FluentAssertions. 
  43:         Result.Model.Should().Be(The<Customer>());
  44:     }
  45: }

It’s a bit of a mixture between MSpec style, BDD Style testing, and using some really useful frameworks such as XUnit, AutoFac, NSubstitute, FluentAssertions and AutoFixture. So in the next couple of blog posts, I’d like to describe my style of unit testing further.

I've decided to call this framework Chill. "If you stick it in a container, Chill will keep it cool."

https://github.com/erwinvandervalk/chill

1 comment:

  1. học kế toán thực hành
    tiếng anh cho người đi làm
    khoá học kế toán excel
    forum rao vat
    mu private
    học kế toán tại tphcm
    dịch vụ kế toán trọn gói

    Sau khi bàn tay dâm đãng lưu luyến không muốn buông ra đã rời khỏi nơi
    khiến cho Đoạn Vân hoài niệm kia, hắn bắt đầu chữa trị thân thể cho thụy
    mỹ nhân.

    Đương nhiên rồi, bắt đầu vẫn như cũ là mổ bụng! Đoạn Vân trước tiên dùng
    ngân châm khống chế hệ thần kinh của thụy mỹ nhân, khiến cho trái tim Hi
    Nhã dưới kích thích của châm cứu tạm thời khôi phục một chút cơ năng
    chữa trị trái tim. Sau đó Đoạn Vân dùng Quang hệ ma pháp, thảo dược và
    Tế tự thuật kết hợp lại, trải qua một hồi cố gắng, cuối cùng cũng chữa
    trị tốt cho trái tim nàng.

    Sau khi chữa trị tốt cho trái tim, Đoạn Vân cũng không lập tức khâu lồng
    ngực đã bị mổ ra, mà là chuyển hướng sang linh hồn. Ở trong Không gian
    giới tử, bất kể là thân thể được đặt trong bao lâu cũng sẽ không phát
    sinh một biến hóa gì, do đó Đoạn Vân muốn giải phóng thân thể trước.

    Đoạn Vân đem thần thức của mình quét qua linh hồn Hi Nhã một lần, rồi
    rất bất lực lắc lắc đầu. Theo Đoạn Vân suy đoán, năng lượng linh hồn của
    linh hồn này quá yếu, cho dù chữa trị vết thương trên linh hồn kia, cũng
    không có khả năng làm cho nàng có đủ năng lượng sinh mệnh. Trừ phi mình
    bổ sung cho nàng một ít năng lượng linh hồn. Tuy nhiên chân khí trong cơ
    thể mình một khi gặp được năng lượng linh hồn sẽ sinh ra một loại lực
    hút đem năng lượng hấp thu lại, vả lại, năng lượng linh hồn của mình
    tặng cho nàng, vậy không biết mình sẽ có việc gì hay không đây? Nếu có


    căn hộ diamond bay resort
    chung cư hoà bình green city
    five star garden kim giang

    học kế toán tại hải phòng
    học kế toán tại bắc giang

    ReplyDelete