你如何在 RhinoMocks 中存根接受 IEnumerable 的方法?

How do you stub a method that accepts an IEnumerable in RhinoMocks?

我有一个 SqlLayer class 我正在尝试 Mock,它有一个 GetDataReader 方法,该方法接受字符串查询和 SqlParameters 的 IEnumerable。我试过像这样删除方法调用:

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

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

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

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

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

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

此处的假设是变量 spaceConsumedQuery 中的值与在测试对象中使用的值相同。

如果不是,那么 Arg<string>.Is.Anything 也可以用来放松匹配。