JustMock .NETユニットテスト利器(二)JustMock基礎
7684 ワード
JustMock APIベース
モックはTelerik®JustMockフレームワークの主要クラス.Mockは、インスタンスおよび静的シミュレーションの作成、動作のスケジュールおよび検証に使用します.
ここでは、「Mock」の基本的な使い方について説明します.
まずIooオブジェクトを作成します
実Mockインスタンスを作成するには、この
var foo =Mock.Create();
また、初期化がコンストラクション関数パラメータに渡されるように指定できます.
対応するユニットテストは以下の通りです.
・CallOriginal()-元の方法で実行します.
・DoInstead()-メソッドの呼び出し時にカスタムコードを実行します.
・Initialize()-すべてのフレームワークメソッドを設定します.
・DoNothing()-コールを無視します.このメソッドは可読性にのみ使用され、voidメソッドにのみ適用されます.
・MustBeCalled()-このメソッドがテストの実行中に呼び出されたことを宣言することをマークします.
・Raise()-嘲笑を呈する事件.
・Raises()-メソッドが呼び出されると、イベントが提案されます.
・Returns()-非voidメソッドを使用してカスタム値を返します.
・Throws()-メソッドを呼び出して例外を放出します.
次に、メソッド呼び出しをスケジュールしてカスタム指定値を返す例を示します.
「Arrabge」メソッドではなく、属性セットをシミュレートしたい場合は、「ArrangeSet」メソッドを使用する必要があります.次の例では、プロパティが特定の値に設定されているときに例外を放出する方法を示します.
この
ここには、Knowledge Baseから特定の書籍を取得するためのBookServiceがあります.IBookRepositoryには1つの方法しかありません.GetWhereは、パラメータとして付属のBookを返すために使用されます.λ式の指定.Lambda式を使用して特定の属性を持つブックGetSingleBookのBookServiceクラスを取得する方法idを見てみましょう.
次のテストでは、Arrangeフェーズでlambda式を使用します.
リポジトリ
上記の第1節で説明したように、
いくつかのメソッド/プロパティ呼び出しの動作を手配し、操作を実行した後、返される結果または一般的な動作を検証する必要があります.これを使ってAssertメソッドはこれをします.
Assertの配列方法は実際に呼び出されます.
メソッド呼び出しを手配しなくても、メソッドが呼び出されたかどうかを断言できます.呼び出しメソッドのように属性取得呼び出しを断言することもできます.
アサーション属性、「使用する必要がある」Mock.AssertSet.使用するシミュレーションを実証するために.AssertSet'では、前述の動作をこのトピックの1つである「MustBeCalled」を使用します.プロパティが実際にテスト実行に設定されていることを確認します.
この話題を少し複雑な例で完成させましょう.戻り値リストに遭遇する場合があります.次の例では、返されたアイテムの数を検証し、特定のメソッドが呼び出されたことを宣言する方法を示します.
この例では、次のIooRepositoryを使用します.
参考文献:
http://docs.telerik.com/devtools/justmock/getting-started/mock#auto-arrange-virtual-properties-set-from-constructor-arguments
モックはTelerik®JustMockフレームワークの主要クラス.Mockは、インスタンスおよび静的シミュレーションの作成、動作のスケジュールおよび検証に使用します.
ここでは、「Mock」の基本的な使い方について説明します.
まずIooオブジェクトを作成します
publicinterfaceIFoo
{
intBar{get;set;}
voidToString();
}
インスタンスシミュレーションの作成
実Mockインスタンスを作成するには、この
Mock.Create
メソッドまたはその汎用バージョンMock.Create
を使用する必要があります.これにより、テスト中の実際のオブジェクトの代わりに虚偽のオブジェクトを作成します.var foo =Mock.Create
また、初期化がコンストラクション関数パラメータに渡されるように指定できます.
publicclassFoo
{
publicFoo(int arg)
{
}
}
対応するユニットテストは以下の通りです.
[TestMethod]
publicvoidSimpleTestMethod()
{
//Arrange
var foo =Mock.Create(()=>newFoo(1));
//Assert
Assert.IsNotNull(foo);
}
Arrange
Arrange
メソッドは、シミュレーションメソッドまたは属性呼び出しの動作を変更するために使用される.このセクションで説明した1つまたは複数のサポートされている動作とともに使用されます.・CallOriginal()-元の方法で実行します.
・DoInstead()-メソッドの呼び出し時にカスタムコードを実行します.
・Initialize()-すべてのフレームワークメソッドを設定します.
・DoNothing()-コールを無視します.このメソッドは可読性にのみ使用され、voidメソッドにのみ適用されます.
・MustBeCalled()-このメソッドがテストの実行中に呼び出されたことを宣言することをマークします.
・Raise()-嘲笑を呈する事件.
・Raises()-メソッドが呼び出されると、イベントが提案されます.
・Returns()-非voidメソッドを使用してカスタム値を返します.
・Throws()-メソッドを呼び出して例外を放出します.
次に、メソッド呼び出しをスケジュールしてカスタム指定値を返す例を示します.
[TestMethod]
publicvoidArrangingAMethodCallToReturnACustomValue()
{
//Arrange
var foo =Mock.Create();
Mock.Arrange(()=> foo.Bar).Returns(10);
}
「Arrabge」メソッドではなく、属性セットをシミュレートしたい場合は、「ArrangeSet」メソッドを使用する必要があります.次の例では、プロパティが特定の値に設定されているときに例外を放出する方法を示します.
[TestMethod]
publicvoidArrangingAPropertySetToThrowAnException()
{
//Arrange
var foo =Mock.Create();
Mock.ArrangeSet(()=> foo.Bar=0).Throws();
}
Arrange-動的値を持つ式の使用
この
Arrange
メソッドでは、パラメータ式で動的値を使用することもできます.これにより、lambda式を使用した配列を細かく制御できます.次のシーンを見てみましょう.publicclassBookService
{
privateIBookRepository repository;
publicBookService(IBookRepository repository)
{
this.repository = repository;
}
publicBookGetSingleBook(int id)
{
return repository.GetWhere(book => book.Id== id);
}
}
publicinterfaceIBookRepository
{
BookGetWhere(Expression> expression);
}
publicclassBook
{
publicintId{get;privateset;}
publicstringTitle{get;set;}
}
ここには、Knowledge Baseから特定の書籍を取得するためのBookServiceがあります.IBookRepositoryには1つの方法しかありません.GetWhereは、パラメータとして付属のBookを返すために使用されます.λ式の指定.Lambda式を使用して特定の属性を持つブックGetSingleBookのBookServiceクラスを取得する方法idを見てみましょう.
次のテストでは、Arrangeフェーズでlambda式を使用します.
[TestMethod]
publicvoidShouldAssertMockForDynamicQueryWhenComparedUsingAVariable()
{
//Arrange
var repository =Mock.Create();
var expected =newBook{Title="Adventures"};
var service =newBookService(repository);
Mock.Arrange(()=> repository.GetWhere(book => book.Id==1))
.Returns(expected)
.MustBeCalled();
//Act
var actual = service.GetSingleBook(1);
//Assert
Assert.AreEqual(actual.Title, expected.Title);
}
リポジトリ
GetWhere
メソッドがid=
を呼び出されると、返される本は特定の本であるべきであることを指定する.その後、私たちは行動を取った-私たちが実行したGetSingleBook
方法、BookService
私たちは予想された本が返されると断言した.コンストラクション関数パラメータから仮想プロパティセットを自動的に配置するには
上記の第1節で説明したように、
Mock.Create
を使用すると、作成したオブジェクトに初期化パラメータが渡されるコンストラクション関数を指定できます.コンストラクション関数がシミュレーション中のタイプに含まれる仮想属性の値を設定する場合、Mock.Create
と同じ方法で使用できます.その結果、仮想属性の値が自動的に並べ替えられます.この特性を示す例を見てみましょう.publicclassItem
{
publicvirtualstringName{get;set;}
publicItem(string name)
{
Name= name;
}
}
[TestMethod]
publicvoidShouldAutoArrangePropertySetInConstructor()
{
//Arrange
var expected ="name";
var item =Mock.Create- (()=>newItem(expected));
//Assert
Assert.AreEqual(expected, item.Name);
}
Assert検証動作
いくつかのメソッド/プロパティ呼び出しの動作を手配し、操作を実行した後、返される結果または一般的な動作を検証する必要があります.これを使ってAssertメソッドはこれをします.
Assertの配列方法は実際に呼び出されます.
[TestMethod]
publicvoidTestMethodShowingAssertFunctionality()
{
//Arrange
var foo =Mock.Create();
Mock.Arrange(()=> foo.ToString()).MustBeCalled();
//Act
foo.ToString();
//Assert
Mock.Assert(foo);
}
メソッド呼び出しを手配しなくても、メソッドが呼び出されたかどうかを断言できます.呼び出しメソッドのように属性取得呼び出しを断言することもできます.
[TestMethod]
publicvoidTestMethodShowingAssertFunctionalityOnPropGet()
{
//Arrange
var foo =Mock.Create();
Mock.Arrange(()=> foo.Bar).Returns(10);
//Act
var returnValue =foo.Bar;
//Assert
Assert.AreEqual(10,returnValue);
}
アサーション属性、「使用する必要がある」Mock.AssertSet.使用するシミュレーションを実証するために.AssertSet'では、前述の動作をこのトピックの1つである「MustBeCalled」を使用します.プロパティが実際にテスト実行に設定されていることを確認します.
[TestMethod]
publicvoidTestMethodShowingAssertFunctionalityOnPropSet()
{
//Arrange
var foo =Mock.Create();
Mock.ArrangeSet(()=> foo.Bar=0).MustBeCalled();
//Act
foo.Bar=0;
//Assert
Mock.Assert(foo);
}
この話題を少し複雑な例で完成させましょう.戻り値リストに遭遇する場合があります.次の例では、返されたアイテムの数を検証し、特定のメソッドが呼び出されたことを宣言する方法を示します.
この例では、次のIooRepositoryを使用します.
publicinterfaceIFooRepository
{
ListGetFoos{get;set;}
}
[TestMethod]
publicvoidVerifyingNumbersOfReturnedItemsAndAssertingAMethodIsCalled()
{
//Arrange
var repository =Mock.Create();
List list =newList(){
newFoo(1),
newFoo(2),
newFoo(3),
newFoo(4),
newFoo(5)
};
Mock.Arrange(()=> repository.GetFoos).Returns(list).MustBeCalled();
//Act
IList foos = repository.GetFoos;
var expected =5;
var actual = foos.Count;
//Assert
Assert.AreEqual(expected, actual);
Mock.Assert(repository);
}
参考文献:
http://docs.telerik.com/devtools/justmock/getting-started/mock#auto-arrange-virtual-properties-set-from-constructor-arguments