忽略 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 类型的参数的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Java 允许增加子类中受保护方法的可见性?

.Net中受保护的内部意味着啥[重复]

如何影响派生类中受保护的基变量

firebase 中受保护内容的适当授权规则

c#中受保护和私有保护有啥区别? [复制]

Java中受保护的访问修饰符