C#中如何使用Microsoft Fakes对SPListItem的.this[]索引器进行Shim?
实现步骤
添加SharePoint程序集的Fakes引用
在测试项目的引用列表中找到Microsoft.SharePoint程序集,右键点击选择「添加Fakes程序集」,等待生成对应的Fakes代理程序集。编写测试用例 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
相关产品推荐
相关产品推荐

