Dig*_*der 11 c# unit-testing indexer moq
在问题的最后: 使用Moq在C#中设置索引器,有一个问题是有人突出显示了我遇到的问题.但他们没有找到解决方案.
具体来说,我正在尝试使用泛型It.IsAny<string>作为键的匹配器并通过设置值It.IsAny<object>.通过索引访问并设置值时,它永远不会匹配,也不会访问我的回调方法.所以我的单元测试失败了.
var stateTable = new HashTable;
var httpSession = new Mock<HttpSessionStateBase>();
//works via httpSession.Add(key, value);
httpSession.Setup(x => x.Add(It.IsAny<string>(), It.IsAny<object>()))
.Callback((string index, object value) => {
var i = index;
var v = value;
stateData[i] = v;
});
//does not work via httpSession[key] = value;
httpSession.SetupSet(x => x[It.IsAny<string>()] = It.IsAny<object>())
.Callback( (string index, object value) => {
var i = index;
var v = value;
stateData[i] = v;
});
Run Code Online (Sandbox Code Playgroud)
我正在使用Moq 4.0.10827
根据我的经验,这永远不会有效,你不能使用It.IsAny作为索引器表达式中的匹配器.但是,如果在索引器中放置具体值,它将匹配.例如,以下内容确实有效:
httpSession.SetupSet(x => x["someValue"] = It.IsAny<object>())
.Callback( (string index, object value) => {
var i = index;
var v = value;
stateData[i] = v;
});
Run Code Online (Sandbox Code Playgroud)