内容营销

测试Salesforce集成的提示和最佳做法

Salesforce测试将帮助您验证定制的 Salesforce集成 以及其他企业应用程序的功能。 良好的测试涵盖了所有Salesforce模块,从客户到潜在客户,从机会到报告,从活动到联系人。 与所有测试一样,有一种(有效的和有效的)方法来执行Salesforce测试,而有一种不好的方法。 那么,Salesforce测试的最佳做法是什么?

  • 使用正确的测试工具 – Salesforce测试在浏览器或基于Eclipse的环境中进行。 最新的浏览器和eclipse都具有出色的调试工具,您可以将它们与测试类结合使用以获得非常有用的结果。 但是,如果您需要更多,则应使用Force.com的Apex交互式调试器(或简称为Apex)。 请注意,您还可以使用Salesforce Lightning Inspector(镀铬扩展程序)专门测试Salesforce Lightning。 Apex是一个 原力网 与Java极为相似的平台专有编程语言。 它是一种面向对象的,不区分大小写的强类型编程语言,它遵循花括号和点符号语法。 您可以在大多数Force.com流程中使用Apex执行编程功能,包括自定义链接和按钮,更新,删除以及通过Visualforce页面自定义控制器或计划记录插入事件处理程序。
  • 使用正确的命名约定– 在开始编写测试之前,正确命名测试方法非常重要。 测试方法名称应包含三个部分。 这些是nameOfMethod(正在测试的单个方法的名称,例如在测试触发器时进行插入/更新/删除/取消删除操作;有关TestPath的信息,该信息非常灵活,例如在您测试联系人为空时为空联系,并且在测试时有效积极/消极的道路。
  • 确保100%覆盖– 尽管标准Salesforce指令要求单元测试覆盖代码的75%(减去测试类,对System.debug的调用和测试方法),并且您将无法部署Apex代码或打包AppExchange应用,但您应该请注意,这只是一个标准,您的目标应该是100%覆盖率。 测试所有阳性/阴性病例以及存在和不存在的数据。 关于代码覆盖率的其他重要提示是:
    • 您应该运行测试以刷新代码覆盖率编号,因为更新Apex代码之前不会重新刷新这些编号,直到重新运行测试为止。
    • 如果自上次测试运行以来组织中已有更新,则存在代码覆盖范围编号不正确的风险。 重新运行测试以获得正确的估计值。
    • 代码覆盖率百分比不包括托管软件包测试的代码覆盖率,唯一的例外是这些测试导致触发触发器时。
    • 覆盖范围取决于代码行的总数。 如果添加或删除代码行,则将影响百分比。
  • 类和控制器中的测试用例– 在Salesforce开发中,大多数开发人员为每个功能创建单独的类和控制器文件。 这样做是为了使编码更加有条理,更容易,可重用和可移植。 但是,您应该注意,虽然这比较容易,但是效率不高。 如果测试代码位于原始类和控制器代码本身中,那么您将实现可移植性,因为从沙箱迁移到生产环境时,您不会错过任何测试类。
  • 使用System.assert()– 在Apex中 系统断言()用于检查条件。 这是一项重要的功能,因为它使您可以确定该方法是否已按预期执行了特定功能。 您应该在关键功能之间使用System.assertEquals()和System.assertNotEquals()不仅可以帮助您确定是否已按预期方式执行了代码,而且还可以确保在代码出错时不会错误地写入数据。
  • 综合测试 –测试应涵盖所有内容。 您应该进行功能测试,负载测试,安全测试和部署测试。
  • 单元测试– 您应该进行单元测试,以验证各个记录是否产生正确和预期的结果。 尽管使用覆盖整个代码的巨大测试似乎是一个好主意,但请注意,生成的结果将更难以调试,而失败将更难以理解。 单元测试应涵盖所测试功能的一小部分。
  • 测试大宗案件– 一个好的测试代码(触发器,异常或类)可能涉及多达数百条记录(对于Apex,则为200条)。 您应该利用此优势,不仅要测试单个记录,还要测试大宗案件。
  • 正面测试– 测试以确保是否在所有预期排列中都发生了预期行为。 测试应验证用户正确填写了表格,并且他/她没有超出限制。
  • 阴性测试– 测试否定情况,以确保正确生成错误消息。 此类否定案例的示例无法指定负数,也无法添加将来的日期。 负面的测试很重要,因为当事情往南走时正确的处理可能会带来不同。
  • 自动化测试– 传统上,Salesforce测试是手动的。 您应该考虑进行自动化测试,因为这可以提供更多优势。 这些包括:
    • 手动测试使您容易出错,因为测试是人工而非机器人进行的。 机器人擅长重复性活动,而人则由于无聊,注意力不集中和保持一致性以及偷工减料而犯错。
    • 手动测试是重复的,公式化的和累人的。 测试团队最好进行更具探索性的工作。
  • 执行每个代码逻辑分支– 使用条件逻辑时(当您包含三元运算符时),应执行代码逻辑的每个分支。
  • 使用无效和有效的输入来调用方法– 对方法的调用应同时使用无效输入和有效输入。
  • 完整测试– 确保测试成功完成–除非出现错误,否则它们不应通过任何例外。 处理所有捕获到的异常-捕获它们还不够好。
  • 使用ORDER BY关键字– 为确保按期望的顺序返回记录,请使用ORDER BY关键字。
  • 不要假设记录ID是按顺序排列的– 避免假定记录ID按顺序排列的常见错误。 除非您在同一请求中插入了多条记录,否则这些ID并不是按升序排列的。
  • 调用Test.startTest()和Test.stopTest()– 当您运行Apex单元测试时,您将获得超过75%的代码覆盖率,这在Salesforce中是必需的。 您应该在断言之前调用stopTest来强制可能仍在运行的异步代码完成。 运行新查询以获取最终结果,因为其他代码可能会更改数据。 usingTest.startTest()和Test.stopTest()可以确保您在调速器限制内对测试进行沙箱测试。 这样,您使用的设置代码将不会产生干扰,并且会给您错误的否定或肯定的限制。 Test.stopTest()还确保@future调用将完成以进行测试。
  • 可读性– 可读性在单元测试中非常重要。 测试名称应包括要采取的具体措施和预期结果。 该方法应具有描述性且简短。 该方法应可在不同测试中重复使用。
  • 在startTest之前构建大型测试数据集– 由于您的测试将在不同的沙盒和生产环境中运行,因此在调用startTest之前应先构建大型测试数据集,以确保测试具有完整的执行限制。 默认, Salesforce GitHub 运行与生产数据隔离的测试。 当您需要诸如Profile之类的系统数据时,请进行查询以获取适合该特定环境的信息。
  • 生成您自己的测试数据– 您使用的测试数据应在测试中生成。 您可以使用@testSetup批注和TestUtils类生成此数据,不仅可以确保您拥有正确的数据,还可以确保所有测试都在开发人员沙箱上运行,而无需数据。
  • 避免无操作的AKA空操作– 许多测试人员使用无操作AKA空操作。 这些是无用的代码,什么也不做。 由于它们已经存在于您的代码库中,因此它们会增加您的覆盖率。
  • 并行测试执行– 从Salesforce用户界面或开发者控制台启动测试时,测试将并行运行。 这是一项重要功能,因为它可以加快测试运行时间。 但是,您应该注意,这可能会导致数据争用问题,如果您怀疑这可能会发生,请关闭并行执行。 导致经常出现UNABLE_TO_LOCK_ROW错误的数据争用问题的最常见原因是:
    • 当测试旨在同时更新相同记录时。 当测试不创建自己的数据时,通常会更新相同的记录。
    • 当并行运行的测试出现死锁时,它们会尝试创建具有匹配索引字段值的记录。 当2个正在运行的测试排队回滚数据时将发生死锁(当2个测试输入记录具有相同的唯一索引字段值且顺序不同时,将发生死锁)。
    • 要关闭并行测试执行,请转到“设置”,进入“ Apex测试”,进入“ Apex测试执行选项”对话框,选择“禁用并行Apex测试”,然后单击“确定”。

禁用并行Apex测试

聘请专业人士,因为他将拥有完成良好测试所必需的经验和培训,这也使您放心。 聘请专业人士可以让您专注于自己的核心业务。 由于您不需要内部团队来完成工作,因此还可以节省金钱。

阿玛·库克雷亚(Amar Kukreja)

Amar Kukreja在Salesforce测试方面拥有多年经验。 他使用Apex以及其他测试。 他还提供其他相关的Salesforce服务,包括Salesforce的初始设置和管理。 Salesforce GitHub.

相关文章

返回顶部按钮
关闭

检测到Adblock

Martech Zone 我们能够免费为您提供这些内容,因为我们通过广告收入、联属链接和赞助从我们的网站中获利。 如果您在浏览我们的网站时删除广告拦截器,我们将不胜感激。