2011-03-06 55 views
2

有没有使用Rhino Mocks生成存根的方法IObjectSet<T>嘲笑IObjectSet <T>与Rhino Mocks

什么是点以后是像下面的代码:

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); 

GenerateFakeProjectList静态辅助方法,我简单地创建指定类型的对象,并通过AddObject方法对它们添加到存根IObjectSet

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

回答

2

我会使用一个具体的实例,或一个简单的假。该接口有少量的方法,实现看起来微不足道。嘲笑该接口只会增加不必要的复杂性。

+0

嗨Ritch,我想我必须硬着头皮制作假混凝土类。感谢指针。 – 2011-03-07 20:06:03

+0

是的,Mocking是手工维护一堆假货和处理Mock框架之间的一种折衷。如果类型很简单,我会尝试直接使用它并使用xUnit test-assertions。如果没有,那么我嘲笑并使用模拟框架的断言。 – 2011-03-07 20:48:56

1

由于你在模拟一个接口,所以没有实际的代码。刚刚成立了一个存根为你的接口,然后踩灭的项目属性返回你想要什么(我假设Projects是一个属性,但不包括项目类的定义)。

像这样的东西应该工作:

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

帕特里克。感谢您的输入。可悲的项目不是一个财产;所以我无法使用你的方法。但是,对于我来说,了解您为其他情景提供的语法很好。 – 2011-03-07 20:05:08

+0

格兰特出于好奇,什么是“项目”? – PatrickSteele 2011-03-07 22:12:09

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; } 
     } 
    }