我正在尝试模拟一个SqlLayer类,该类具有一个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
来放松匹配。