次のような方法があるとします。
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);
}
}
...単体テストは失敗しますが、おそらくアプリケーションを壊すことはありません...
質問
リターンタイプ*または**内部モック以外のものを変更しないメソッドでユニットテストを作成することさえわざわざする必要がありますか?