典型的なリポジトリがあるとします
public class Repository:IRepository<Entity>
{
public Entity GetById(int id)
{
//blah
}
public IEnumerable<Entity> All()
{
//blah
}
public void Insert(Entity entity)
{
}
public void Update(Entity entity)
{
//blah
}
public void Delete(Entity entity)
{
//blah
}
}
MSTest を使用して、エンティティを挿入および更新するリポジトリの機能をテストしたいと考えています。具体的なリポジトリになるとすぐに、実際の DB に対してテストしています。
したがって、Insert メソッドをテストすると、戦略は明確になります。
- 新しいエンティティを作成
- それを保存
- ID でエンティティを取得する
- エンティティがリポジトリから返されることをアサートします
しかし、Update メソッドのテストについて考えていると、ややこしくなります。主な質問は
- DB に既にオブジェクトが保存されていることを確認して、フェッチして更新できるようにするにはどうすればよいですか?
- 空のデータベースに対して更新をテストする方法は?
回避策には不要なコードが必要になり、テストが肥大化するようです。優雅な解決策はありますか?