私が過去に読んだように、ここで私は、各用語は
の略信じるものスタブだ
ここであなただけできるように、既知の値にメソッドの結果をスタブされていますコードは問題なく実行されます。たとえば、次のように指定します:
public int CalculateDiskSize(string networkShareName)
{
// This method does things on a network drive.
}
このメソッドの戻り値が何であるかは関係ありませんが、関係はありません。さらに、ネットワークドライブが利用できない場合に実行されると例外が発生する可能性があります。したがって、このメソッドの潜在的な実行の問題を回避するために、結果をスタブします。あなたが偽のデータを返す、またはオブジェクトの偽のインスタンスを作成している偽のでは
sut.WhenCalled(() => sut.CalculateDiskSize()).Returns(10);
フェイク:
は、だからあなたのような何かをやってしまいます。典型的な例は、リポジトリクラスです。この方法を取る:
public int CalculateTotalSalary(IList<Employee> employees) { }
通常、上記の方法には、データベースから読み取った従業員のコレクションが渡されます。しかし、単体テストではデータベースにアクセスしたくありません。あなたは、この場合には、総給与をfakeEmployeesに項目を追加し、期待される結果を主張することができます
IList<Employee> fakeEmployees = new List<Employee>();
:だから、偽の従業員のリストを作成します。
モック
をモックオブジェクトを使用して、あなたはそれらのモックオブジェクト上のいくつかの行動、またはデータを、検証していきます。例:あなたは具体的な方法は、テスト実行中に実行されたことを確認したい
、ここでは部品番号モックフレームワークを使用して、一般的な例です:
public void Test()
{
// Arrange.
var mock = new Mock<ISomething>();
mock.Expect(m => m.MethodToCheckIfCalled()).Verifiable();
var sut = new ThingToTest();
// Act.
sut.DoSomething(mock.Object);
// Assert
mock.Verify(m => m.MethodToCheckIfCalled());
}
うまくいけば、上記のは、物事を少し明確にするのに役立ちます。
EDIT: Roy OsheroveはTest Driven Developmentの有名な提唱者であり、トピックに関する非常に良い情報があります。あなたはそれが非常に便利見つけることがあります。
http://artofunittesting.com/
読むこのhttp://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%20Dummies.htmlこのhttp://martinfowler.com/articles/mocksArentStubs.html – blank
そして、あなたがでている間それを読んでいるかもしれません。http://www.mockobjects.com/files/mockrolesnotobjects.pdf – blank
私はあなたが商業を赦してくれることを願っていますが、私たちは「Growing Object Oriented Software」という本を書いています。モックを使って –