.Net TDD私はMachineを使います.Specification

12353 ワード

昨日たまたまProfessional ASPを見ました.NET MVC 2という本ではTDDを使った開発方法を紹介していますが、このようなコードが入っています.
 

  
    
1 public void Index() {
2 // Arrange
3   HomeController controller = new HomeController();
4
5 // Act
6   ViewResult result = controller.Index() as ViewResult;
7
8 // Assert
9   ViewDataDictionary viewData = result.ViewData;
10 Assert.AreEqual( " Welcome to ASP.MET MVC! " , viewData[ " Message " ]);
11 }

 
 
このコードは私にプロジェクトの中でMachine.SpecificationというTDDのテストフレームワークを使ういくつかの利点を意識させて、みんなと分かち合います.Machineを使えばSpecification、上のコードはこのように書くことができます:
 

  
    
1 [Subject( typeof (HomeController))]
2   public class When_getting_index_page
3 {
4 static HomeController controller;
5 static ViewResult result;
6 static ViewDataDictionary viewData;
7
8 Establish context =
9 () =>
10 {
11 controller = new HomeController();
12 result = controller.Index() as ViewResult;
13 };
14
15 Because of =
16 () => viewData = result.ViewData;
17
18 It should_have_the_welcome_message =
19 () => viewData[ " Message " ].ShouldEqual( " Welcome to ASP.MET MVC! " );
20 }

 
 
行数的にはMachineを使います.Specificationsは少し長いですが、コードに注釈を付ける必要はありませんが、同時にコードを読む人は、このテストがどのようなcontextの下で、because ofがどのような操作をして、shouldがどのような結果を生成しているかを一目で知ることができます.
 
  Machine.SpecificationにはShouldEqualというextention methodのほかにも、ShouldBeNull,ShouldBeOfType,ShouldBeTheSameAs,ShouldEqual,ShouldNotBeNull,ShouldNotBeOfType,ShouldBeTheSameAs,ShouldEqual,ShouldNotBeNull,ShouldNotBeOfType,ShouldNOtBeTheSameAd,ShouldEqual.
 
  Machine.SpecificationにはBehaviorをサポートする良い機能があります.例えば、いくつかのテストで共通の機能を測定する必要があります.このとき、これらの共通の機能をBehaviorに提出することができます.カッコの中の内容は以下の「Behaviors」属性クラスの名前であることに注意してください.
 

  
    
1 Behaves_like < When_preparing_article_add_edit_view_model_behavior > preparing_view_model;

 
 
 

  
    
1 [Behaviors]
2 public class When_preparing_article_add_edit_view_model_behavior
3 {
4 protected static IArticleAddEditViewModel model;
5
6 It should_set_the_periodicals =
7 () => model.Periodicals.ShouldNotBeNull();
8
9 // more assertions here
10   }

 
 
以上の2つの例はMachineにすぎません.Specificationsは短い紹介を使っていますが、興味があればgithubにダウンロードしてみてください.このTDDテストフレームワークが好きになってほしいです.もう2つ接続して、英語のMachineです.Specificationの紹介では、Resharperを構成する方法について説明しています.Resharperを使用すると、各テストの横に緑の小さな円点があり、クリックするとこのテストを単独で実行することができます.
1.  Step by Step to Using MSpec (Machine.Specifications) with ReSharper
2.  Introducing Machine.Specifications (or MSpec for short)