2011-03-06 2 views
2

Rhino Mock을 사용하여 IObjectSet<T>에 스텁을 생성하는 방법이 있습니까? GenerateFakeProjectList 정적 도우미 메서드에서Rhino Mock을 사용하여 IObjectSet <T>을 조롱합니다.

var context = MockRepository.GenerateMock <IContext>(); 
//generate stub 
var mockProjectObjectSet = MockRepository.GenerateStub<IObjectSet<Project>>(); 
TestObjectSets.GenerateFakeProjectList(mockProjectObjectSet); 
context.Expect(p => p.Projects).Return(mockProjectObjectSet); 
var projectRepository = new ProjectRepository(context); 

, 단순히 지정된 유형의 개체를 만드는 오전에 AddObject 방법을 통해 스텁에 추가 : 오전이 무엇

후 다음 코드 같은 것입니다 그 IObjectSet :

public static IObjectSet<Project> GenerateFakeProjectList(IObjectSet<Project> projectsObjectSet) 
{  
    projectsObjectSet.AddObject(new Project() 
    { 
    Categories = null, 
    DateCreated = DateTime.Now.AddDays(-10), 
    ....... 

답변

2

나는 구체적인 인스턴스를 사용하거나 간단한 가짜. 이 인터페이스는 적은 수의 메소드를 가지고 있으며 구현은 간단합니다. 인터페이스를 조롱하면 불필요한 복잡성이 추가됩니다.

+0

Hi Ritch 나는 총알을 물고 가짜 콘크리트 수업을해야한다고 생각한다. 포인터 주셔서 감사. –

+0

그렇습니다. Mocking은 여러 가짜를 손쉽게 관리하고 Mock 프레임 워크를 다루는 것에서 절충안입니다. 유형이 단순하다면 직접 사용하고 xUnit 테스트 주장을 사용하려고합니다. 그렇지 않다면 나는 모의 프레임 워크의 주장을 조롱하고 사용한다. –

1

인터페이스를 조롱하고 있기 때문에 실제 코드가 전혀 없습니다. 인터페이스에 스텁을 설정 한 다음 Projects 속성을 스텁하여 원하는 것을 반환합니다 (Projects은 속성이지만 Project 클래스의 정의는 포함하지 않았 음).

var stubSet = MockRepository.GenerateStub<IObjectSet<Project>>(); 
stubSet.Stub(s => s.Projects).Return(new[] 
               { 
                new Project {Categories = null}, 
                new Project {Categories = "abc"} 
               }); 
+0

패트릭. 귀하의 의견을 보내 주셔서 감사합니다. 슬프게도 프로젝트는 재산이 아닙니다. 그래서 당신의 방법을 사용할 수 없었습니다. 그러나 다른 시나리오에 대해 제공 한 구문을 아는 것이 좋습니다. –

+0

호기심에서 "프로젝트"란 무엇인가? – PatrickSteele

5

내가이 파티에 늦었 알고 있지만, 여기에 내가 전에 사용했던 IObjectSet<T>의 간단한 구현이다 :이 같은

뭔가 작동합니다. 내가 어디에서 왔는지 잊어 버린다 :

public class MockObjectSet<T> : IObjectSet<T> where T : class { 
     readonly List<T> _container = new List<T>(); 

     public void AddObject(T entity) { 
      _container.Add(entity); 
     } 

     public void Attach(T entity) { 
      _container.Add(entity); 
     } 

     public void DeleteObject(T entity) { 
      _container.Remove(entity); 
     } 

     public void Detach(T entity) { 
      _container.Remove(entity); 
     } 

     public IEnumerator<T> GetEnumerator() { 
      return _container.GetEnumerator(); 
     } 

     IEnumerator IEnumerable.GetEnumerator() { 
      return _container.GetEnumerator(); 
     } 

     public Type ElementType { 
      get { return typeof(T); } 
     } 

     public System.Linq.Expressions.Expression Expression { 
      get { return _container.AsQueryable<T>().Expression; } 
     } 

     public IQueryProvider Provider { 
      get { return _container.AsQueryable<T>().Provider; } 
     } 
    } 
관련 문제