2011-09-13 5 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

당신은 데이터를 생성하기 위해 MOQ을 사용할 수 없지만 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(); 
} 

이 여러 추가합니다 각 부모를위한 여러 개의 잠옷이있는 부모.

관련 문제