5

我正在尝试创建一个通用测试类来测试我的通用控制器。除了这个,一切都很好:我有一个这样的方法:

private T GetSingle(Expression<Func<T, bool>> expression)

我正在尝试像这样设置测试:

var Guids = new[] { Guid.NewGuid(), Guid.NewGuid() };
var items = Guids.Select(x => new T {Id = x});
var mock = new Mock<IRepository<T>>();
mock.Setup(m => m.GetSingle(
    It.IsAny<Expression<Func<T, bool>>>()))
   .Returns(new T());

并像这样执行测试:

var value = Repository.GetSingle(x=> x.Id == Guid.NewGuid());

总是返回一个新的 T。

我的设置错了吗?

4

1 回答 1

9

您指示 Moq 返回相同的确切实例(在本例中为new T()),无论提供什么表达式,任何时候GetSingle都会被调用。您真正想要的是它针对 调用该表达式items

mock.Setup(m => m.GetSingle(It.IsAny<Expression<Func<T, bool>>>()))
   .Returns<Expression<Func<T, bool>>>(expression => items.AsQueryable().Single(expression));
于 2012-11-16T22:36:47.437 回答