2

典型的なリポジトリがあるとします

 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 メソッドをテストすると、戦略は明確になります。

  1. 新しいエンティティを作成
  2. それを保存
  3. ID でエンティティを取得する
  4. エンティティがリポジトリから返されることをアサートします

しかし、Update メソッドのテストについて考えていると、ややこしくなります。主な質問は

  • DB に既にオブジェクトが保存されていることを確認して、フェッチして更新できるようにするにはどうすればよいですか?
  • 空のデータベースに対して更新をテストする方法は?

回避策には不要なコードが必要になり、テストが肥大化するようです。優雅な解決策はありますか?

4

1 に答える 1

3

ClassInitialize TestInitializeをClassCleanupおよびTestCleanupと共に使用して、既知のエンティティをデータベースに事前設定します。次にUpdate()、それらに対してテストを実行します。

Update()「不要なコード」を解釈する方法がわからない...メソッドをテストするために、データベースにデータを入力するために何かをする必要があるようです。少なくとも上記の属性を使用すると、実際のテスト メソッドを汚染することなく、データベースの初期化とクリーンアップに必要なロジックを実装できます。

于 2012-04-28T09:47:32.550 に答える