あなたの身代わりを知る
Andrew Trenk
原文のリンク:
http://googletesting.blogspot.tw/2013/07/testing-on-toilet-know-your-test-doubles.html
身代わりをテストするテストでは、本物の相手の代わりに、まるで映画の中でスタントマンが俳優の代わりに使われます.さまざまなテストの身代わりが「mocks」として扱われることがありますが、実際には用途が違っていますので、どのようにして各種類の身代わりを区別するかを学ぶ必要があります.最も一般的なテストのスタントマンは、これらの種類があります.stub、mock、fakes.
stubは論理を考慮していません.要求通りにあなたの欲しい内容を返します.stubはこの場合に使用できます.テスト状態のコードを特定の状態にするためには、特殊な値を返すために対象が必要です.手でstub文を書くのは難しくないですが、mockingフレームを使うと、通常より簡単にサンプルファイルの減少が実現できます.
//mockingのフレームから生まれたmockに入る.
Access Manager accessManager=newAccess Manager;
accessManager.userHasAccess(USERuID)
//accessManager.userHasAccess(USER ID)が起動されていない場合//MockAuthentication Service.isAuthenticated(USERuID)または呼び出しが一回を超えると、このテストは失敗します.
verify(mockAuthentication Service).isAuthenticated(USERuID)
fakeはmockingフレームを使用しないで、それは軽量級のインターフェースで実現されています.本当の実現と同じ表現ですが、製品と一致することはできません.実際の実装を使ってテストができない場合、fakeを使って代替することができます.常にfakeを作成する必要はありません.fakeは通常実際に所有者によって作成され、メンテナンスされます.
//fakeを作るのはとても速くて簡単です.
Authentication Service fake Authentication Service=newFakeAuthentication Service()
Access Manager accessManager=newAccess Manager;
//認証サービスがユーザを知らない場合、ユーザはアクセス権限がないassitert False(accessManager.userHasAccess(USERuID)である.
//ユーザが認証サービスに追加されているときは、アクセス権限があります.
fakeAuthentication Service.addAuthenticatedUser(USERuID)
astert True(accessManager.userHasAccess(USERuID);
「身代わりテスト」という言葉は、Gerard Meszarsが『xUnit Test Patterns』で書いたものです.この本やそのサイトからより多くの情報を知ることができます.また、マーティン・フォwlerの文章でも、異なるタイプのテストのスタントマンについての議論を見ることができます.
原文のリンク:
http://googletesting.blogspot.tw/2013/07/testing-on-toilet-know-your-test-doubles.html
身代わりをテストするテストでは、本物の相手の代わりに、まるで映画の中でスタントマンが俳優の代わりに使われます.さまざまなテストの身代わりが「mocks」として扱われることがありますが、実際には用途が違っていますので、どのようにして各種類の身代わりを区別するかを学ぶ必要があります.最も一般的なテストのスタントマンは、これらの種類があります.stub、mock、fakes.
stubは論理を考慮していません.要求通りにあなたの欲しい内容を返します.stubはこの場合に使用できます.テスト状態のコードを特定の状態にするためには、特殊な値を返すために対象が必要です.手でstub文を書くのは難しくないですが、mockingフレームを使うと、通常より簡単にサンプルファイルの減少が実現できます.
// mocking stub.
AccessManager accessManager = newAccessManager(stubAuthenticationService);
// false , 。
when(stubAuthenticationService.isAuthenticated(USER_ID)).thenReturn(false);
assertFalse(accessManager.userHasAccess(USER_ID));
// true , 。
when(stubAuthenticationService.isAuthenticated(USER_ID)).thenReturn(true);
assertTrue(accessManager.userHasAccess(USER_ID));
mockには期待が含まれていますが、もしテスト結果が期待されていなかったら、このテストは失敗です.mockは通常、オブジェクト間のインタラクションをテストするために用いられます.あるテストを実行している間、状態の変化も検証可能な戻り値も見えない場合、mockは特に有用です.(例えば、あなたのコードはディスクから読み取りますが、ディスクを一度だけ読み込むことができるようにしたい場合、mockを通して読み取り方法を一度だけ呼び出すことができます.). //mockingのフレームから生まれたmockに入る.
Access Manager accessManager=newAccess Manager;
accessManager.userHasAccess(USERuID)
//accessManager.userHasAccess(USER ID)が起動されていない場合//MockAuthentication Service.isAuthenticated(USERuID)または呼び出しが一回を超えると、このテストは失敗します.
verify(mockAuthentication Service).isAuthenticated(USERuID)
fakeはmockingフレームを使用しないで、それは軽量級のインターフェースで実現されています.本当の実現と同じ表現ですが、製品と一致することはできません.実際の実装を使ってテストができない場合、fakeを使って代替することができます.常にfakeを作成する必要はありません.fakeは通常実際に所有者によって作成され、メンテナンスされます.
//fakeを作るのはとても速くて簡単です.
Authentication Service fake Authentication Service=newFakeAuthentication Service()
Access Manager accessManager=newAccess Manager;
//認証サービスがユーザを知らない場合、ユーザはアクセス権限がないassitert False(accessManager.userHasAccess(USERuID)である.
//ユーザが認証サービスに追加されているときは、アクセス権限があります.
fakeAuthentication Service.addAuthenticatedUser(USERuID)
astert True(accessManager.userHasAccess(USERuID);
「身代わりテスト」という言葉は、Gerard Meszarsが『xUnit Test Patterns』で書いたものです.この本やそのサイトからより多くの情報を知ることができます.また、マーティン・フォwlerの文章でも、異なるタイプのテストのスタントマンについての議論を見ることができます.