假設你有一個方法:單元測試(是或否)
public void Save(Entity data)
{
this.repositoryIocInstance.EntitySave(data);
}
你寫單元測試呢?
public void TestSave()
{
// arrange
Mock<EntityRepository> repo = new Mock<EntityRepository>();
repo.Setup(m => m.EntitySave(It.IsAny<Entity>());
// act
MyClass c = new MyClass(repo.Object);
c.Save(new Entity());
// assert
repo.Verify(m => EntitySave(It.IsAny<Entity>()), Times.Once());
}
因爲以後如果要更改方法的實現做更多的「複雜」的東西,如:
public void Save(Entity data)
{
if (this.repositoryIocInstance.Exists(data))
{
this.repositoryIocInstance.Update(data);
}
else
{
this.repositoryIocInstance.Create(data);
}
}
...單元測試會失敗,但它可能不會打破你的應用程序...
問題
應我甚至懶得上的方法創建單元測試,沒有任何返回類型*或**不改變內部模擬以外的任何內容?
在這種情況下,此方法不需要單元測試,因爲不會中斷應用程序,測試會中斷。在這種情況下,我正在測試imeplementation,而不是在方法範圍內不存在的合同。 – 2009-08-03 10:34:17