正如我過去讀過,這裏是什麼,我相信每個詞代表
存根
這裏你磕碰到已知值的方法的結果,只是爲了讓代碼運行沒有問題。例如,可以說你有以下幾點:
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) { }
通常上述方法將傳遞從數據庫中讀取的僱員的集合。但是在你的單元測試中,你不想訪問數據庫。所以你創建一個假的員工列表:
IList<Employee> fakeEmployees = new List<Employee>();
然後,您可以將項目添加到fakeEmployees並斷言預期的結果,在這種情況下,工資總額。
嘲笑
當使用模擬對象,你打算驗證某些行爲,或數據,這些模擬對象。例如:
要驗證一個特定的方法是試運行期間執行,這是一個使用起訂量嘲諷框架一般示例:
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());
}
希望上面有助於澄清事情有點。
編輯: Roy Osherove是測試驅動開發的知名倡導者,他有一些關於該主題的非常好的信息。您可能會發現它非常有用:
http://artofunittesting.com/
閱讀本http://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%20Dummies.html這http://martinfowler.com/articles/mocksArentStubs.html – blank 2013-02-15 10:13:16
雖然你在你不妨閱讀這個http://www.mockobjects.com/files/mockrolesnotobjects.pdf – blank 2013-02-15 10:21:18
我希望你能赦免商業廣告,但是我們寫了一本完整的書「面向對象的軟件」,解決了動機使用嘲笑。 – 2013-04-27 10:52:39