gpt4 book ai didi

c# - 为需要 Func 并返回 IEnumerable 的 protected 虚拟方法设置 Moq 调用

转载 作者:行者123 更新时间:2023-11-30 20:48:19 25 4
gpt4 key购买 nike

我有以下代码。

public class MyClass
{
protected virtual IEnumerable<TResult> MyMethod<TResult>(Func<IDataReader, IEnumerable<TResult>> arg)
{
....
}
}

如何为此设置 Mock 方法?

我尝试跟随但出现错误。

using Moq;
using Moq.Protected;
namespace Foo
{
[TestClass]
public class TestClass
{
Mock<MyClass> m_mockObject = null;
[TestMethod]
public void MyTest()
{
m_mockObject = new Mock<MyClass>();
AddMethod<Func<IDataReader, IEnumerable<SomeOtherClass>>, IEnumerable<SomeOtherClass>>(this.MyMethod);

}

private void AddMethod<TIn, TResult>(Func<TIn, TResult> method)
{
m_mockObject.Protected().Setup<TResult>(method.Method.Name, ItExpr.IsAny<TIn>())
.Returns(method); /* THIS LINE IS THROWING THE EXCEPTION */
}

public IEnumerable<TResult> MyMethod<TResult>(Func<IDataReader, IEnumerable<TResult>> arg)
{
....
}
}
}

运行代码后,调用 Setup 函数时出现以下错误。

> System.ArgumentException was unhandled by user code  HResult=-2147024809  Message=Expression of type 'System.Object' cannot be used for return type 'System.Collections.Generic.IEnumerable`1[SomeOtherClass]'  Source=System.Core  StackTrace:       at System.Linq.Expressions.Expression.ValidateLambdaArgs(Type delegateType, Expression& body, ReadOnlyCollection`1 parameters)       at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, String name, Boolean tailCall, IEnumerable`1 parameters)       at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, Boolean tailCall, IEnumerable`1 parameters)       at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, ParameterExpression[] parameters)       at Moq.Protected.ProtectedMock`1.Setup[TResult](String methodOrPropertyName, Object[] args)       ....       .....  InnerException: 

最佳答案

不确定您为什么要返回一个方法..但您可以尝试将其更改为:

m_mockObject.Protected().Setup<IEnumerable<TResult>>(method.Method.Name, ItExpr.IsAny<TIn>()).Returns(new List<TResult>());

看看是否可行..

关于c# - 为需要 Func 并返回 IEnumerable 的 protected 虚拟方法设置 Moq 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24791055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com