c# - 带有 It.IsAny 的 Expression<Func<T, bool>> 总是返回 true

标签 c# unit-testing generics moq expression-trees

我正在尝试创建一个通用测试类来测试我的通用 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/

相关文章:

c# - 检查具有特殊字符重构的属性值

java - Android Gradle:如何分别运行集成和单元测试?

java - 检查给定的对象是否是通用的并得到否。参数个数

java - 泛型 collections.mixin 原始类型和泛型类型。 Integer -> String - 异常但 String -> Integer 效果很好

c# - 使用紧凑框架 3.5 从数据网格中检索数据

c# - 我可以发送图像和 rar 文件,但这些文件已被 asp.net 损坏?

c# - JwtSecurityToken 是否有最短到期时间?

javascript - 单元测试javascript代码风格

javascript - jasmine需要sinon.js吗?

c# - 我怎样才能避免类型转换但传递正确的类型