2011-09-13 25 views
3

私のリポジトリをテストするために、いくつかのデータを生成する必要があります。私はオブジェクトのリストを生成するためにループを使用していました。以下のコードを参照してください。私はmoqが素晴らしいmockingライブラリであることを学びました。私はそれを生成するためにmoqを使うことができますか?ユニットテストでmoqを使って偽のデータを生成する方法は?

public IQueryable<Category> GetCategories() 
{ 
    IList<Category> result = new List<Category>(); 

    for (int i = 1; i <= 2; i++) 
    { 
     Category c = new Category(); 
     c.ID = i; 
     c.Name = "Parent" + i.ToString(); 
     c.ParentID = 0; 

     for (int x = i*10; x < i*10+5; x++) 
     { 
      Category sub = new Category(); 
      sub.ID = x; 
      sub.Name = "Sub" + x.ToString(); 
      sub.ParentID = i; 
      result.Add(sub); 
     } 

     result.Add(c); 
    } 

    return result.AsQueryable<Category>(); 
} 

答えて

5

あなたは、データを作成するために部品番号を使用することはできませんが、AutoFixtureを使用することができます。

public IQueryable<Category> GetCategories() 
{ 
    return fixture.CreateMany<Category>().AsQueryable(); 
} 

しかし、これはあなたに階層ツリーを与えることはありません。それはこのようにオブジェクトを返します。

Object 1: 
- ID = 0 
- ParentID = 1 
Object 2: 
- ID = 2 
- ParentID = 3 

など

本当にこの階層データを持っている必要がある場合は、次のコードを使用する必要があります:

public IQueryable<Category> GetCategories() 
{ 
    var result = new List<Category>(); 

    // Create the parents 
    var parents = fixture.Build<Category>() 
         .Without(x => x.ParentID) 
         .CreateMany()); 
    result.AddRange(parents); 

    result.AddRange(parents.SelectMany(p => fixture.Build<Category>() 
                .With(x => x.ParentID, p.ID) 
                .CreateMany())); 

    return result.AsQueryable(); 
} 

これは複数追加されます各親に複数のサブを持つ親。

関連する問題