有必要覆盖单元测试,例如代码片段:
FAQ__kav article =
[SELECT Title, KnowledgeArticleId, (Select DataCategoryName, ParentId From DataCategorySelections)
From FAQ__kav
WHERE PublishStatus='Online' AND Language = 'en_US' AND UrlName = :url
LIMIT 1];
我不想使用@IsTest(SeeAllData = true)注释,这就是为什么我无法访问通过类别分配手动创建的类别和组。 我可以创建,插入数据库并使用PublishingService发布文章。但我没有找到以编程方式创建和保存ArticleCategory和ArticleCategoryGroup的方法。
因此,在单元测试环境中运行此代码片段时,我得到异常
17:04:12.425 (3425626000)|FATAL_ERROR|System.QueryException: List has no rows for assignment to SObject
有人可以指明,我该如何测试这些东西?
答案 0 :(得分:0)
去检查Salesforce Labs Public Knowledge Base v3(将其安装在一个支持konwledge的沙箱中)以获取一些想法。
这是一个免费的非托管包 - 这意味着你可以查看&根据需要修改代码。你不必以任何方式使它工作 - 你只是想看看“几乎官方”的代码。
从我记忆中来看,对知识进行单元测试有点痛苦。对于初学者 - 你不能发表我认为的文章,你只能将它们创建为草稿。这样就可以立即杀死WHERE
的这一点。
也许你可以通过改变你的逻辑来做。尝试使用SOSL而不是SOQL(在UI中创建类似于侧边栏搜索/全局搜索的结果的搜索方言)。您可以更正确地使用数据类别分配(WITH
clause - 公平地说,它也可以在普通的旧SOQL中使用)。但更重要的是 - 在单元测试中你可以通过mocking the expected output of a SOSL search作弊。
或许你可以放弃这整块Apex?您确定使用<knowledge:*>
Visualforce tags无法实现所需目标吗?
答案 1 :(得分:0)
您可以使用以下方法添加类别:
Faq__DataCategorySelection dataCategory = new Faq__DataCategorySelection();
dataCategory.ParentId = article.ID;
dataCategory.DataCategoryGroupName = 'Support_Options';
dataCategory.DataCategoryName = category;
insert dataCategory;
这将添加您的类别,您可以查询