使用 rhino 模拟对通用存储库进行单元测试
为什么这个测试失败了?
[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();
}
我是用犀牛进行模拟的新手,我做错了什么?
提前致谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试在这一行添加 .IgnoreParameters() :
两个旁注:您的函数
"T Find(Expression> predicate)
"可以只使用
Predicate ;
而不是Func
。两者基本相同。如果您还没有,请获取 Manning 的 Roy Osherove 所著的《单元测试的艺术》一书。
http://www.manning.com/osherove/
他使用以下内容提供了几章的单元测试示例犀牛模拟
Try adding .IgnoreParameters() on this line:
Two side notes: your function
"T Find(Expression<Func<T,bool>> predicate)
"could just use a
Predicate<T>
instead of aFunc<T,bool>
. The two are basically the same.If you don't already have it, get a copy of the book "The Art of Unit Testing" by Roy Osherove from Manning.
http://www.manning.com/osherove/
He provides several chapters worth of unit testing samples using Rhino.Mocks