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

如何对Microsoft.Sharepoint.Client.Web类进行Shim打桩测试?

问题解决步骤

问题根源

你当前引用的Fakes程序集属于SharePoint服务器端对象模型(SSOM),仅包含对应SSOM类型SPWeb的ShimSPWeb,没有你使用的客户端对象模型(CSOM)下Microsoft.SharePoint.Client.Web对应的ShimWeb类。

具体解决方法

1. 生成CSOM程序集对应的Fakes

  • 先确认单元测试项目已正确引用CSOM依赖:Microsoft.SharePoint.Client和Microsoft.SharePoint.Client.Runtime,可以直接通过NuGet安装对应版本的CSOM包。
  • 右键点击单元测试项目引用列表里的Microsoft.SharePoint.Client程序集,选择「添加Fakes程序集」,等待VS自动生成该程序集的Shim、Stub类。
  • 生成完成后在测试类头部引入命名空间:using Microsoft.SharePoint.Client.Fakes;

2. 修正单元测试写法

修复你原测试代码的语法错误,可参考以下示例实现模拟逻辑:

[TestMethod]
public void EnsureFolders_ShouldConfirmExistenceOrCreateFolders()
{
    using (ShimsContext.Create())
    {
        // 模拟ClientContext.Load方法,避免触发真实SharePoint请求
        ShimClientContext.AllInstances.LoadOf1M0ExpressionOfFuncOfM0ObjectArray<Folder>(
            (context, folder, expression, args) => 
            {
                // 可在此处为模拟的Folder对象赋值,适配你的业务逻辑判断
            });

        // 模拟Web.GetFolderByServerRelativeUrl方法的返回结果
        ShimWeb.AllInstances.GetFolderByServerRelativeUrlString = (targetWeb, path) =>
        {
            // 存在场景:返回模拟Folder对象;不存在场景:可抛出System.IO.FileNotFoundException
            return new ShimFolder();
        };

        // 此处补充测试执行逻辑:实例化模拟参数,调用业务方法,断言结果
    }
}

3. 异常问题排查

  • 如果生成Fakes后仍找不到ShimWeb,先清理解决方案,再重新生成单元测试项目,清除VS缓存的Fakes生成结果。
  • 若项目同时引用了SSOM的SharePoint程序集Fakes,需使用完整命名空间限定类型,避免冲突:Microsoft.SharePoint.Client.Fakes.ShimWeb。

内容的提问来源于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.24 03:54:08