如何对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
相关产品推荐
相关产品推荐

