Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表达式<;Func<;T、 布尔>&燃气轮机;有了它,我就永远回到了真实_C#_Unit Testing_Generics_Moq_Expression Trees - Fatal编程技术网

C# 表达式<;Func<;T、 布尔>&燃气轮机;有了它,我就永远回到了真实

C# 表达式<;Func<;T、 布尔>&燃气轮机;有了它,我就永远回到了真实,c#,unit-testing,generics,moq,expression-trees,C#,Unit Testing,Generics,Moq,Expression Trees,我正在尝试创建一个通用testclass来测试我的通用控制器。除此之外,一切正常: 我有这样一种方法: private T GetSingle(Expression<Func<T, bool>> expression) 这总是返回一个新的T 我的设置是否错误?您指示Moq返回相同的精确实例(在本例中,new T()),无论何时调用GetSingle,都不考虑提供的表达式。实际上,您希望它针对项调用该表达式: mock.Setup(m => m.GetSingle(

我正在尝试创建一个通用testclass来测试我的通用控制器。除此之外,一切正常: 我有这样一种方法:

private T GetSingle(Expression<Func<T, bool>> expression)
这总是返回一个新的T


我的设置是否错误?

您指示Moq返回相同的精确实例(在本例中,
new T()
),无论何时调用
GetSingle
,都不考虑提供的表达式。实际上,您希望它针对
项调用该表达式:

mock.Setup(m => m.GetSingle(It.IsAny<Expression<Func<T, bool>>>()))
   .Returns<Expression<Func<T, bool>>>(expression => items.AsQueryable().Single(expression));
mock.Setup(m=>m.GetSingle(It.IsAny()))
.Returns(expression=>items.AsQueryable().Single(expression));

您正在测试的是什么?在我看来,您似乎想要模拟以实际实现存储库查找逻辑。谢谢黑客!我在这方面已经做了一段时间了,但无法使它正常工作。我对这个很陌生,谢谢你帮助我提高
Single()
做的就是它的本意,它有一个完全接受该参数的函数。它可能更好,因为如果有多个匹配项,它将抛出。是的,我在谓词重载上的错误。
var value = Repository.GetSingle(x=> x.Id == Guid.NewGuid());
mock.Setup(m => m.GetSingle(It.IsAny<Expression<Func<T, bool>>>()))
   .Returns<Expression<Func<T, bool>>>(expression => items.AsQueryable().Single(expression));