返回传递给mocked方法的值

Ish*_*yal 5 c# unit-testing moq

我在接口上有一个方法:

Someclass DoSomething(Someclass什么);`

Someclass DoSomething(Someclass whatever);因为错误我无法做到:

无法将lambda表达式转换为类型Someclass,因为它不是委托类型.

有任何想法吗?

Ser*_*kiy 8

看看这些方法重载:

Returns(TResult value)
Returns<T>(Func<T, TResult> valueFunction)
Run Code Online (Sandbox Code Playgroud)

对你来说很明显,C#编译器应该选择第二个重载.但实际上C#编译器无法Tx => x您传递的参数中推断出泛型参数的类型.这就是编译器选择非泛型方法并尝试将lambda转换为SomeClass的原因.

要解决此问题,您应该帮助编译器推断泛型参数的类型T.您可以通过显式指定委托参数的类型来实现:

.Returns((SomeClass x) => x);
Run Code Online (Sandbox Code Playgroud)

或者您可以T手动指定类型

.Returns<SomeClass>(x => x)
Run Code Online (Sandbox Code Playgroud)