.Net TDD私はMachineを使います.Specification
12353 ワード
昨日たまたまProfessional ASPを見ました.NET MVC 2という本ではTDDを使った開発方法を紹介していますが、このようなコードが入っています.
このコードは私にプロジェクトの中でMachine.SpecificationというTDDのテストフレームワークを使ういくつかの利点を意識させて、みんなと分かち合います.Machineを使えばSpecification、上のコードはこのように書くことができます:
行数的には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」属性クラスの名前であることに注意してください.
以上の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)
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)