2011-01-09 139 views
0

为什么这个测试失败?单元测试通用仓库与犀牛嘲笑

[TestMethod] 
    public void Can_show_next_event() 
    { 
     // Arrange 

     var eventsRepo = MockRepository.GenerateStub<IRepository<Event>>(); 

     Event nextEvent = new Event{ 
             ID = 2, 
             Title = "Test Event", 
             Date = DateTime.Now.AddDays(2) 
            }; 

     eventsRepo.Stub(x => x.Find(y => y.Date > DateTime.Now)) 
        .Return(nextEvent); 

     // Act 
     var controller = new EventsController(eventsRepo); 
     var result = controller.Index() as ViewResult; 

     // Assert 
     Assert.IsNotNull(result); 
     Assert.AreEqual("Details", result.ViewName); 

    } 

测试在最后一行失败,似乎仓库没有返回我想要的。

这里的索引行动

public ActionResult Index() 
{ 
    var model = _eventsRepo.Find(x => x.Date > DateTime.Now); 
    return model != null ? View("Details", model) : View("NoEvents"); 
} 

这里是我的通用仓库接口

public interface IRepository<T> where T: class 
{ 
    IQueryable<T> GetAll(); 
    IEnumerable<T> GetAll(Expression<Func<T, bool>> predicate); 
    T GetById(int id); 
    T Find(Expression<Func<T, bool>> predicate); 
    void Add(T item); 
    void Delete(T item); 
    void Save(); 
} 

我是新来与犀牛嘲笑,我究竟做错了什么?

在此先感谢

回答

0

试穿这条线将.IgnoreParameters():

eventsRepo.Stub(x => x.Find(y => y.Date > DateTime.Now)) 
        .IgnoreParameters() 
        .Return(nextEvent); 

两个旁注:你的函数"T Find(Expression<Func<T,bool>> predicate)

可以只使用一个Predicate<T>代替Func<T,bool>。这两个基本上是一样的。

如果你还没有它,得到一本书的副本“The单元测试的艺术“,来自Manning的Roy Osherove。 http://www.manning.com/osherove/

他提供了使用Rhino.Mocks

单元测试样品的几个章节价值