Salesforce Apex获取社区知识热门文章测试类报错修复
报错根因
报错由3处问题共同导致:
- 测试桩参数不匹配:调用
ConnectApi.Knowledge.setTestGetTrendingArticles时第一个参数传了null,但业务代码实际调用getTrendingArticles传入的是查询得到的真实社区ID。Salesforce ConnectApi 测试桩要求入参必须和业务实际调用的入参完全一致才能命中模拟返回,传null不会自动匹配任意社区ID。 - 断言逻辑错误:模拟的返回列表仅添加了2个
KnowledgeArticleVersion对象,却断言返回结果长度为12,即使桩方法命中也会触发断言失败。 - 测试块位置错误:业务方法调用写在了
Test.startTest()外层,不符合Apex测试编写规范,会导致测试上下文计数异常。
修复后的测试类代码
@isTest public class ConnectTopicCatalogControllerTest { @isTest static void getTrendingArticles(){ // 和业务类保持一致的社区查询逻辑,获取对应社区ID String communityId = [SELECT Id FROM Network WHERE Name = 'Customer Community v5' LIMIT 1].Id; // 构造模拟接口返回数据 ConnectApi.KnowledgeArticleVersionCollection mockResult = new ConnectApi.KnowledgeArticleVersionCollection(); List<ConnectApi.KnowledgeArticleVersion> mockArticleList = new List<ConnectApi.KnowledgeArticleVersion>(); mockArticleList.add(new ConnectApi.KnowledgeArticleVersion()); mockArticleList.add(new ConnectApi.KnowledgeArticleVersion()); mockResult.items = mockArticleList; // 注册测试桩,传入和业务调用完全一致的社区ID、分页参数 ConnectApi.Knowledge.setTestGetTrendingArticles(communityId, 12, mockResult); List<ConnectApi.KnowledgeArticleVersion> testResult; Test.startTest(); // 业务方法调用必须放在startTest和stopTest之间 testResult = ConnectTopicCatalogController.getAllTrendingArticles(); Test.stopTest(); // 断言结果和模拟数据量一致 System.assertEquals(2, testResult.size(), '热门文章返回数量不符合预期'); } }
补充说明
- 如果运行测试时提示Network查询无结果,说明测试上下文默认无法访问组织内的社区配置数据,可以给测试类添加
@isTest(SeeAllData=true)注解,或者在测试方法内提前插入测试用的Network模拟数据。 - 所有ConnectApi系列的测试桩方法,都严格遵循入参全匹配规则,只要有一个参数和业务实际传入值不一致,就会抛出你遇到的"No matching test result found"错误。
内容的提问来源于stack exchange,提问作者Coders Perry
相关产品推荐
相关产品推荐

