【问题标题】:How do you stub a method that accepts an IEnumerable in RhinoMocks?如何在 RhinoMocks 中存根一个接受 IEnumerable 的方法?
【发布时间】:2020-02-20 18:25:23
【问题描述】:

我有一个我试图模拟的 SqlLayer 类,它有一个 GetDataReader 方法,它接受一个字符串查询和一个 IEnumerable 的 SqlParameters。我试过像这样删除方法调用:

var parameters = new SqlParameter[] {}
mockSqlLayer.Stub(x => x.GetDataReader(spaceConsumedQuery, parameters)).Return(MockDataReader());

但测试返回 NullReferenceException,我认为是因为签名没有正确解析,并且找不到存根。 我尝试调用的方法签名如下所示:

public IDataReader GetDataReader(string commandText, IEnumerable<SqlParameter> parameters)

【问题讨论】:

  • var parameters = Enumerable.Empty&lt;SqlParameter&gt;()试试看是否还有错误
  • 在同一个地方仍然出现同样的错误。
  • 在这种情况下,类型不是你的问题。
  • the canonical NRE answer 欺骗而关闭,但不确定是否重新打开。

标签: c# unit-testing rhino-mocks


【解决方案1】:

需要放松参数匹配器以允许调用按预期运行。

mockSqlLayer
    .Stub(_ => _.GetDataReader(spaceConsumedQuery, Arg<IEnumerable<SqlParameter>>.Is.Anything))
    .Return(MockDataReader());

最初使用的代码需要使用相同的对象引用来匹配调用。

这里的假设是变量spaceConsumedQuery中的值与锻炼被测对象时使用的值相同。

如果不是,那么Arg&lt;string&gt;.Is.Anything 也可以用来放松匹配。

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2014-07-21
    相关资源
    最近更新 更多