在测试环境中创建具有指定类别的文章

时间:2014-02-07 16:09:13

标签: unit-testing salesforce apex

有必要覆盖单元测试,例如代码片段:

    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

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

2 个答案:

答案 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;

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