为什么这个测试失败了?
[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 :(得分: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>
。两者基本相同。
如果您还没有,请获取Manning的Roy Osherove所着的“The Unit of Unit Testing”一书。 http://www.manning.com/osherove/
他使用Rhino.Mocks提供了几个单元测试样本的章节