2014-02-07 49 views
1

这里有必要与单元测试这样的代码片段涵盖:在测试环境中创建项目以指定类别

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 =真)注解,这就是为什么我无权访问通过类别提交手动创建的类别和组.. 我可以使用PublishingService创建,插入数据库并发布文章。但我还没有找到以编程方式创建和保存ArticleCategory和ArticleCategoryGroup的方法。

所以,虽然在运行单元测试环境这段代码,我得到异常

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

有人可以指定,我应该怎么考这样的事情?

回答

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

当然,我们可以发布文章,像PublishingService这样的API的最近变化解决了这个问题。我正在使用 user1570815