我正在尝试创建一个通用测试类来测试我的通用 Controller 。一切正常,除了这个: 我有一个这样的方法:
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。
我的设置有误吗?
最佳答案
无论提供的表达式如何,只要调用 GetSingle
,您就指示 Moq 返回完全相同的实例(在本例中为 new T()
) .您真正想要的是针对 items
调用该表达式:
mock.Setup(m => m.GetSingle(It.IsAny<Expression<Func<T, bool>>>()))
.Returns<Expression<Func<T, bool>>>(expression => items.AsQueryable().Single(expression));
关于c# - 带有 It.IsAny 的 Expression<Func<T, bool>> 总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13425348/