2011-09-13 84 views
3

我需要生成一些數據來單元測試我的存儲庫。我正在使用循環來生成對象列表,請參閱下面的代碼。我學會了moq是一個偉大的嘲諷圖書館,我可以使用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(); 
} 

這將增加多每個父母有多個子女的父母。