c# - 使用 Moq 通过任意键和值设置任意

标签 c# unit-testing moq indexer

在问题的最后: Using Moq to set indexers in 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;
});

我正在使用最小起订量 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;
});

关于c# - 使用 Moq 通过任意键和值设置任意,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6294234/

相关文章:

c# - 单元测试用例生成器

C# 为对象列表创建 Mock Configuration.GetSection (“Section:SubSection” )

Silverlight:单元测试,SL4 的推荐框架?

c# - PostAsync 后未收到响应

c# - 长期不适当的 System.OutOfMemoryException 事件

c# - Windows 窗体应用程序基础 : Keeping all forms in one window

c# - 如何在 C# 中模拟 NestClient DebugInformation?

javascript - 在 DataTable 中使用 LINQ to list<AJAX>

android - UnitTest 中 MutableLiveData 的 setValue 和 postValue

unit-testing - 有没有办法在给定的时间后使单元/集成测试失败?