忽略 Moq 中受保护方法的 List 类型的参数
Posted
技术标签:
【中文标题】忽略 Moq 中受保护方法的 List 类型的参数【英文标题】:Ignoring argument of a List type for a protected method in Moq 【发布时间】:2011-05-26 08:55:11 【问题描述】:我正在尝试设置对受保护方法的预期调用。方法签名如下所示:
protected SqlDataReader MethodName(string Name, List<SqlParameter> paramList, SqlConnection con)
我已经将期望设置如下,但是在运行测试时出现错误:
mock.Protected()
.Setup<SqlDataReader>( "MethodName", "SomeString", ItExpr.IsAny<List<SqlParameter>>(), ItExpr.IsNull<SqlConnection>() )
.Returns( dataReader );
我得到的错误是:
Test method GlobalTests.DBAdapterSystemDataTest.GetDentalWingsProstheticTypeMappings threw exception:
System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: mock => mock.ExecuteReaderStoredProcedure("GetDentalWingsProstheticTypeMappings", It.IsAny<List`1>(), It.Is<SqlConnection>(v => Object.Equals((Object)v, (Object)null)))
有没有人知道如何设置期望以使其起作用?我不关心任何参数值,我只想检查该方法是否至少被调用过一次。
【问题讨论】:
【参考方案1】:错误消息暗示您需要将 virtual
关键字添加到您的 MethodName
方法中,以便 Moq 可以在测试中覆盖它。
【讨论】:
是的,成功了。我不太确定我是否喜欢将我需要模拟的所有方法都设为虚拟,但我会看看它如何与 Moq 配合使用。以上是关于忽略 Moq 中受保护方法的 List 类型的参数的主要内容,如果未能解决你的问题,请参考以下文章