彩票走势图

通过运行时分析获得单元测试的更多好处

原创|使用教程|编辑:郑恭琳|2020-12-01 15:51:02.243|阅读 187 次

概述:单元测试是测试软件的单个单元/组件的最佳实践,但是对于Java开发人员而言,这可能既乏味又昂贵。很难通过人工断言来测试每个单元的正确行为,并通过模拟来隔离每个方法,并且单元测试本身容易受到错误和误解的影响。为了改善这种情况,您可以使用运行时分析工具来检测数据和控制流,外部依存关系,并计算测试代码覆盖率。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

为了实现单元测试的好处,您可以在运行期间通过运行时分析观察单元测试。单元测试执行期间的运行时分析对于提高测试效率和有效性至关重要。

单元测试是测试软件的单个单元/组件的最佳实践,但是对于Java开发人员而言,这可能既乏味又昂贵。很难通过人工断言来测试每个单元的正确行为,并通过模拟来隔离每个方法,并且单元测试本身容易受到错误和误解的影响。为了改善这种情况,您可以使用运行时分析工具来检测数据和控制流,外部依存关系,并计算测试代码覆盖率。

借助从运行时分析中收集到的数据,诸如Parasoft Jtest之类的企业级解决方案可以通过自动推荐正确行为的断言以及模拟方法来改善测试隔离性,从而提示开发人员如何改进测试。自动单元测试生成和运行时分析之间的这种集成减少了Java单元测试所需的手动干预。


单元测试的好处

单元测试是一种众所周知的做法,但是其实现需要在许多项目中进行改进。单元测试做得很好,提高了敏捷过程的敏捷性,提高了质量和安全性,并节省了长期成本。

不幸的是,尽管希望获得更好的结果,但是尽管有这些好处,开发人员仍然无法在单元测试中挣扎。测试创建和维护所需的时间和精力可能太多,无法证明增加测试工作是合理的。通常,测试套件很脆弱,因为单元/对象与依赖项之间的隔离性较差。正确地模拟依赖关系,就像创建确定正确程序逻辑所需的断言一样,成为软件测试人员的祸根。即使对方案进行参数化测试也可能是乏味且耗时的。

如果软件开发团队希望获得彻底的单元测试的好处,则必须通过创建,隔离和维护测试来解决这些问题。答案从测试自动化工具开始,但仅自动化测试执行并收集结果是不够的。运行时分析是观察运行的可执行文件并记录关键指标的过程,是一种创新的方法,可以帮助改善单元测试的创建、模拟和测试稳定性。


运行时分析可以改善单元测试

在大多数情况下,开发人员并不认为运行时分析在单元测试的早期阶段很重要。大多数工具用于捕获单元测试遗漏的错误,或者仅用于计算代码覆盖率。但是,尽管这些好处很重要,但是运行时分析还可以观察单元测试的第一次迭代的执行情况,以提出改进测试的建议,并检测干扰测试稳定性的测试运行时环境的更改。

JUnit之类的测试框架会创建稀疏代码,需要开发人员进一步输入。这项工作很繁琐,因此可以根据观察到的程序逻辑自动填充更多细节。例如,Parasoft Jtest可以自动生成以下单元测试:


同样,对于带有参数化输入的单元测试,如下所示:

由于创建的测试从一开始就是可执行的,因此可以通过运行时分析来观察它们的结果和执行流程。例如,测试可能由于引发异常而失败,如下所示。


检测依赖关系并通过运行时分析进行模拟

此外,运行时工具会观察到依赖关系的执行路径,并建议可能的模拟,以增加测试的隔离度。尽管目视检查被测对象会发现其依赖关系,但是自动检测和模拟这些依赖关系可以节省许多繁琐且容易出错的工作。

在下面的示例中,Parasoft Jtest根据单元测试的执行轨迹为开发人员提供了模拟对象的选择:


在这种情况下,添加可模拟方法模式会将方法添加到要由诸如PowerMock之类的模拟框架处理的模拟列表中。

如下所示,也可以模拟静态构造函数。


通过运行时分析提高测试保真度

在充分了解执行流程以及方法调用中使用的参数之后,可以使用运行时分析向开发人员提供有用的建议,以改进测试代码。尽管提供了断言,但静态地,当创建测试时,它们可能未启用或正确。在执行测试时,失败和遗漏的断言会触发警告,然后会提出建议以解决问题。

例如,在创建新测试之后,并且没有对建议的断言进行注释,您将看到以下内容:

或者,例如,如果断言失败,则显示以下内容:

无论发生什么情况,都是有关断言的纠正措施的持续反馈,这会在创建测试以完成单元测试时关闭循环。另外,随着被测设备的变化,这些变化可以以相同的方式处理,从而不断减少了所需的手动测试维护。


通过运行时分析提高测试稳定性

运行时分析还可以检测执行期间测试环境中的变化,这些变化会影响为后续测试重新创建相同测试环境的能力。一次通过但以后失败的测试可能是造成挫败感,浪费时间和精力的主要原因。您可以使用运行时分析检测到的不稳定性示例包括:

  • 测试期间已更改的系统属性尚未恢复为原始状态。后续测试可能依赖于此属性。
  • 后台中的其他执行线程可能会干扰测试运行。
  • 在测试执行期间创建新文件,如果它们依赖文件及其内容,则可能会影响后续运行。
  • 修改后的静态字段可能会影响使用这些相同字段的以后的测试。

至关重要的是,每个测试执行都必须有相同的起点,以确保获得可靠的结果。通过运行时检测防止测试不稳定,从而消除了测试调试阶段的猜测。

因此,您可以看到运行时分析不仅用于计算代码覆盖率。测试执行期间的运行时分析对于提高测试效率和有效性至关重要。监视执行路径可提供有关依赖项的信息,以改善对依赖项和模拟的处理。可以监视断言,自动建议可以帮助提高测试保真度。在运行时测试环境中检测到影响测试稳定性的更改,可以消除挫败感并减少测试代码的调试周期。



标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP