答えて
あなたは並べ替える必要があります。あなたは知る必要がある2つの基本的なことがあります:命名法とベストプラクティス。
まず、私はあなたの偉大なテスター、ロイOsheroveからの素晴らしいビデオリソースを与えたい:
ユニットテストは、彼は彼が完了 を持っていると言って出発するロイOsheroveによって
レビューテストハーネスのいくつかのレビュー は、いくつかのオープンソース プロジェクトに同梱されています。あなたはここにそれらを見つけることができます。 http://weblogs.asp.net/rosherove/archive/tags/TestReview/default.aspx
これらは基本的に、彼はこれらのテスト ハーネスを、順を追って説明して 、何悪いです良いものを示していますビデオレビュー です。非常に役立ちます。
ロイにも私が理解している本があります。 はとても良いです。
命名
このポッドキャストは非常 を手助けします:http://www.hanselminutes.com/default.aspx?showID=187
私は(Hanselminutesイントロ音楽が 恐ろしいであること) ものの、ポッドキャストを言い換えます:
基本的にeveryt隔離フレームワーク(Moq、Rhino Mocks、Mockなど)は、 fakeと呼ばれます。
偽あなたが をテストしているコードは製品コードの代わりに呼び出すことができることを テスト中に使用されているオブジェクトです。 がアプリケーションの の他の部分からテストしようとしているコードを分離するために偽物が使用されています。
があります(主に)偽物の2種類:スタブ とはを皮肉っ。
モック
あなたが をテストしているコードは、それを呼び出すことができますし、 コールが正しい パラメータで行われたと主張するように、あなたは 場所に置くことに偽物です。[TestMethod] public void CalculateTax_ValidTaxRate_DALCallIsCorrect() { //Arrange Mock<ITaxRateDataAccess> taxDALMock = new Mock<ITaxRateDataAccess>(); taxDALMock.Setup(taxDAL => taxDAL.GetTaxRateForZipCode("75001")) .Returns(0.08).Verifiable(); TaxCalculator calc = new TaxCalculator(taxDALMock.Object); //Act decimal result = calc.CalculateTax("75001", 100.00); //Assert taxDALMock.VerifyAll(); }
あなたがテストしていることを確認コードを作るために場所 にそれを置くことを除いてスタブは、 モックとほぼ同じである:以下のサンプルは、ちょうど この部品番号のアイソレーションを使用して フレームワークを行います は、 コールから一貫性のあるデータを取得します(たとえば、コードが データアクセスレイヤーを呼び出す場合、スタブは になります)。ただし、 はスタブ自体に対してアサートしません。その は、 メソッドが偽のデータアクセスと呼ばれる レイヤーであることを確認する必要はありません。 をテストしようとしています。スタブ を提供して、 テストを単独で実行しようとしているメソッドを取得します。私たちは、むしろ方法は 別のリソースへの呼び出しをしたこと 事実よりも、法の 出力をテストしていることをここ
[TestMethod] public void CalculateTax_ValidTaxRate_TaxValueIsCorrect() { //Arrange Mock<ITaxRateDataAccess> taxDALStub = new Mock<ITaxRateDataAccess>(); taxDALStub.Setup(taxDAL => taxDAL.GetTaxRateForZipCode("75001")) .Returns(0.08); TaxCalculator calc = new TaxCalculator(taxDALStub.Object); //Act decimal result = calc.CalculateTax("75001", 100.00); //Assert Assert.AreEqual(result, 8.00); }
お知らせ:
はここでスタブとの例を示します。
部品番号が実際にモックとスタブ 間のAPI 区別をしませんが、ここでの使用が タイプを決定するのに重要である(
Mock<T>
として宣言されたの両方に注意してください)。
希望すると、まっすぐに設定できます。
コードの塊をテストしたいと思います。あなたのメソッドは、http urlからファイルをダウンロードし、ディスクにファイルを保存した後、そのファイルがディスク上にあることをメールします。これらの3つのアクションはもちろん、あなたのメソッドが呼び出すサービスクラスです。なぜなら、それらは擬似的に簡単だからです。これらをモックしないと、テストを実行するたびに、テストが内容をダウンロードし、ディスクにアクセスし、メッセージを送信します。次に、メソッドのコードをテストするだけでなく、ダウンロードしてディスクに書き込んでメールを送信するコードもテストしています。これらを嘲笑しているなら、メソッドコードだけをテストしています。また、メソッドのコードが正しく動作していることを確認するために、ダウンロードの失敗をシミュレートすることもできます。
私は通常、値を保持しているロジックをあまり持っていないクラスをフェイクします。いくつかの値を保持しているオブジェクトを送信している場合、そのメソッドで変更されている場合は、テストでそれを読み取ってメソッドが正しいことを確認できます。
もちろん、ルールは少しでもうまくいくかもしれませんが、一般的な考え方はコードとコードのみをテストすることです。
ダミー、スタブ、モック、スパイ、フェイクの5種類のテストダブルがあります。良い概観はhttp://code.google.com/testing/TotT-2008-06-12.pdfであり、またボブ・マーティンからのhttp://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%20Dummies.html
The Little Mockerで非常に良い読書です。
[...]まもなく、いくつかの非常に賢い人々が、モックオブジェクトという用語を導入し定義した論文を書いた。他の多くの人がそれを読んで、その用語を使い始めました。紙を読んでいない他の人は、その言葉を聞いて、それをより広い意味で使用し始めました。彼らは言葉を動詞に変えた。彼らは、「その物体を嘲笑してみよう」とか、「私たちはやりたいことがたくさんある」と言うだろう。
この記事では、モック、フェイク、スパイ、スタブの違いについて説明します。
- 1. Silverlightユニットテストの偽装ユーザー
- 2. Visual C++の偽装
- 3. C#Webサービス偽装
- 4. Windows 7でC#コードを偽装する
- 5. PHPユニットテスト偽装メソッドのプロパティを設定
- 6. ユーザー名とパスワードの偽装ですか?
- 7. jasmineとnode.jsでファイルシステムを偽装する
- 8. クラスベースの偽装
- 9. ハイブユーザーセンテリーの偽装
- 10. C#ActiveDirectoryと偽装のリモートサーバー上のファイルシステム
- 11. SQL - 偽装SYSTEM_USER
- 12. ハイブユーザー偽装
- 13. VB.NET Shell()偽装
- 14. Powershell偽装
- 15. WCFサービスデュアル偽装?
- 16. アセンブリを偽装する
- 17. オブジェクトを偽装する
- 18. 偽装を確認する
- 19. IdentityServer:クライアントレベルでの偽装
- 20. スレッド偽装のマルチレベル使用
- 21. テスト用EC2エンドポイントの偽装
- 22. Hive(Beeline)用のKerberos偽装
- 23. Json Webトークンを偽装したり偽装することはできますか?
- 24. 第三者が偽装したり偽装できない方法でサーバーと通信できますか?
- 25. WCF:NetworkCredentialと偽装の関係
- 26. Facebookのファンページを偽装することはできますか?
- 27. Identityserver3 - ユーザーの偽装
- 28. ASP.NET 2.0の偽装
- 29. ios:プライベートプロパティの偽装
- 30. Webサービスコールで "偽装"セッション
Ayende(Rhino Mocksの作成者)は最近、Mock vs Stubを捨てて、次のバージョンのRhino Mockですべてを偽造すると発表しました。何人かは、モックの代わりに何かがスタブであることを知って知識を増やしていると主張する人もいます。気にしない場合は、常にモックを使用して、その前提を主張しないでください。それは、あなたが使いたいものを見つけなければならないという頭痛を軽減します。 –
非常に良い説明アンダーソン。私は偽物や偽造に精通していませんが、Mocking and Stubsに精通しています。偽の命名法はどこから来ますか? –
@Anderson Imes申し訳ありませんが、私はもっと明示的ではありませんでした。私はあなたの説明を理解し、それはかなり十分です。私が意味するのは、誰が "フェイク"の命名法を思いついたのかということです。私は前にこの文脈で言及されたことを見たことがないし、私が読んだことは常にMock対Stubsだった。私はAyendeのブログにも加入していますが、Mock/StubsとFakesを同じ文章で言及したことは一度もありません。 –