假设你有一个方法:单元测试(是或否)
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