2

有必要用单元测试来覆盖这样的代码片段:

    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) 注释,这就是为什么我无法访问通过类别分配手动创建的类别和组。我可以使用创建、插入数据库和发布文章出版服务。但是我还没有找到以编程方式创建和保存 ArticleCategory 和 ArticleCategoryGroup 的方法。

因此,在单元测试环境中运行此代码片段时出现异常

17:04:12.425 (3425626000)|FATAL_ERROR|System.QueryException: List has no rows for assignment to SObject

有人可以指定,我应该如何测试这些东西?

4

2 回答 2

0

去查看Salesforce Labs Public Knowledge Base v3(将其安装在您启用知识的沙箱之一中)以获取一些想法。

这是一个免费的非托管包 - 这意味着您可以根据需要查看和修改代码。你不必以任何方式让它工作——你只是想看看“几乎官方”的代码。

据我所知,对知识进行单元测试有点痛苦。对于初学者 - 我认为您不能发布文章,您只能将它们创建为草稿。所以这会WHERE立即杀死你的这一点。

也许你可以通过改变你的逻辑来凑合。尝试使用 SOSL 而不是 SOQL(在 UI 中创建类似于侧边栏搜索/全局搜索的结果的搜索方言)。您可以在那里更正确地使用数据类别分配(WITH子句- 公平地说,它也可以在普通的旧 SOQL 中使用)。但更重要的是 - 在单元测试中,您可以通过模拟 SOSL 搜索的预期输出来作弊。

或者也许你可以放弃这整个 Apex?您确定无法使用<knowledge:*>Visualforce 标签实现您的需求吗?

于 2014-02-09T20:44:39.730 回答
0

您可以使用以下命令添加类别:

Faq__DataCategorySelection dataCategory = new Faq__DataCategorySelection();
dataCategory.ParentId = article.ID;
dataCategory.DataCategoryGroupName = 'Support_Options';
dataCategory.DataCategoryName = category;
insert dataCategory;

这将添加您的类别,您可以查询它

于 2018-11-05T12:36:31.757 回答