モックと偽造を選択する理想的なシナリオ、つまり基本的なものを手動で設定することを提案するガイドラインを誰か考え出せるでしょうか?
この状況にどう対処したらよいか、少し混乱しています。
ベストアンサー1
さて、整理しなければならないことがいくつかあります。知っておく必要がある基本的なことが 2 つあります。それは、命名法とベスト プラクティスです。
まず最初に、優れたテスターである Roy Osherove による素晴らしいビデオ リソースを紹介します。
Roy Osherove によるユニットテストのレビュー
彼はまず、いくつかのオープンソース プロジェクトに同梱されているテスト ハーネスのレビューをいくつか行ったと述べています。それらのレビューは、次の場所にあります。http://weblogs.asp.net/rosherove/archive/tags/TestReview/default.aspx
これらは基本的にビデオレビューであり、テストハーネスを順を追って説明し、良い点と悪い点を教えてくれます。非常に役立ちます。
ロイには、とても良い本もあるようです。
命名法
このポッドキャストは役に立つだろう非常に:http://www.hanselminutes.com/default.aspx?showID=187
ただし、ポッドキャストを言い換えると (Hanselminutes のイントロ ミュージックはひどいです)、
基本的に、分離フレームワーク(Moq、Rhino Mocks、Type Mockなど)は、偽物。
あ偽物テスト中に使用されるオブジェクトで、テスト対象のコードが本番コードの代わりに呼び出すことができます。フェイクは、テスト対象のコードをアプリケーションの他の部分から分離するために使用されます。
偽物には(主に)2つの種類があります:スタブそしてモック。
あモックこれは、テスト対象のコードがこれを呼び出して、正しいパラメータで呼び出しが行われたことをアサートできるように配置したフェイクです。以下のサンプルは、Moq 分離フレームワークを使用してこれを行います。
[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); }
ここでは、メソッドが別のリソースを呼び出したという事実ではなく、メソッドの出力をテストしていることに注意してください。
Moq では、実際にはモックとスタブの API を区別しません (両方とも として宣言されていることに注意してください
Mock<T>
) が、ここでの使用法は型を決定する上で重要です。
これがあなたの理解に役立つことを願っています。