You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何使用Microsoft Fakes对SPListItem的.this[]索引器进行Shim?

实现步骤
  1. 添加SharePoint程序集的Fakes引用
    在测试项目的引用列表中找到Microsoft.SharePoint程序集,右键点击选择「添加Fakes程序集」,等待生成对应的Fakes代理程序集。

  2. 编写测试用例 Shim 索引器调用
    核心逻辑是在ShimsContext的作用域内,给ShimSPListItem的ItemGetString委托赋值,该委托对应SPListItem接收字符串参数的索引器this[string fieldName]。

完整测试示例代码如下:

using Microsoft.QualityTools.Testing.Fakes;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Fakes;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web.UI.WebControls;

[TestClass]
public class SPListItemTest
{
    [TestMethod]
    public void Test_Get_ReportID_From_SPListItem()
    {
        using (ShimsContext.Create())
        {
            // 初始化Shim后的SPListItem实例
            var shimItem = new ShimSPListItem();
            
            // Shim索引器逻辑:按传入的字段名返回对应模拟值
            shimItem.ItemGetString = fieldName =>
            {
                return fieldName switch
                {
                    "ReportID" => "TEST_REPORT_001", // 自定义ReportID的返回值
                    // 其他字段可按需扩展分支
                    _ => string.Empty
                };
            };
            
            // 获取模拟后的SPListItem实例
            SPListItem item = shimItem.Instance;
            
            // 执行业务逻辑
            var cellReportID = new TextBox();
            cellReportID.Text = item["ReportID"].ToString();
            
            // 结果验证
            Assert.AreEqual("TEST_REPORT_001", cellReportID.Text);
        }
    }
}
注意事项
  • 所有Shim逻辑必须包裹在ShimsContext.Create()的using块中,测试执行完成后上下文会自动清理,避免影响其他测试用例
  • 如果代码中用到了接收int类型字段ID的索引器this[int fieldId],可以对应给ItemGetInt32委托赋值实现Shim
  • 如果字段返回值是非字符串类型,直接在委托中返回对应类型的值即可,无需额外转换

内容的提问来源于stack exchange,提问作者C Puneeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:15:09