Want to see Parasoft in action? Sign up for our Monthly Demos! See Demos & Events >>
Want to see Parasoft in action? Sign up for our Monthly Demos! See Demos & Events >>
Parasoft开发了Parasoft Jtest单元测试助手来提高单元测试的效率,因为Parasoft作为软件测试的专业厂商知道它有多重要,同时也了解单元测试是极其耗时的。
众所周知,单元测试的核心是最佳实践。同时,Parasoft也从用户中了解到许多有关他们的代码单元测试覆盖不足的情况,而且这种情况非常普遍。
那么,为什么最佳实践和现实之间存在差距呢?
让我们看看单元测试覆盖率低的一些原因,以及如何通过软件自动化克服这些障碍。
谈到单元测试,我们首先需要明白,我们为什么需要进行单元测试。大多数开发团队都认同单元测试是有价值的。一个好的单元测试套件为应用程序开发提供了一个安全基础,使团队能够更加迅速地实行开发,同时可以降低潜在的后期阶段风险。
从大方向来讲,创建软件单元测试的过程本身就是一项有益的活动,它能够帮助开发人员从不同的视角审查他们的代码,这件事情的本质上就相当于是进行额外的代码审查。
在编写单元测试时,开发团队可以从外部角度来查看功能接口,考虑下面两个问题,会给团队带来非常大的价值。
—对于这个问题的回答可以简化界面,降低代码维护成本。
—对于这个问题的回答,可以让我们设计更好的、更健壮和可重用的代码来“证明”团队的代码。
我们Parasoft的开发团队在为开发中的代码编写单元测试时发现了许多问题。
通常情况下,开发团队会进行最少的单元测试或完全跳过它。这通常是由于以下两种情况:
为什么团队会只采用有限的单元测试。其实大致可以分为以下几个原因:
目前有几种工具可以帮助进行单元测试。
尽管这些工具很有帮助,但它们没有解决开发人员没有进行足够单元测试这个问题。开发人员在使用这些工具的过程中,都会发现会存在许多问题会导致成本增加,例如:
总而言之,创建单元测试仍然需要大量成本投入来搭建好框架,然后才能开始向测试用例框架中添加业务逻辑。
为了解决上面提到的这些问题,帮助团队节省成本,我们将整个测试趋势转向了软件测试自动化。Parasoft Jtest的单元测试助理(UTA)可以帮助团队仅仅通过点击一个按钮就可以创建一个功能完整的单元测试。
使用Parasoft Jtest创建的测试是常规的JUnits形式的测试用例,但可以为团队完成所有的普通的工作。Parasoft Jtest可以设置测试框架,实例化对象,为待测方法使用的适当对象和方法调用配置模拟,并为测试对象中更改的值添加断言。这些Junit格式类的测试用例可以作为标准CI工作流的一部分执行,与团队利用Junit框架手写的测试用例基本相同。
Parasoft Jtest支持对以下情况测试目标进行测试创建:
开发人员可以选择使用对象初始化和完全配置的Mockit生成多个测试用例,以覆盖测试方法中的所有分支。或者,如果他们想要对生成的代码有更多的控制,他们可以使用有针对性的Parasoft Jtest操作一点一点地构建测试。
Parasoft Jtest的单元测试助手专门通过执行以下操作的辅助工作流程:
许多团队仍然使用大量未经测试的代码维护遗留代码库。当需要对代码进行更改时,这就成为业务风险。
Parasoft Jtest支持开发人员为整个项目、软件包和类生成测试套件,以快速构建一组测试,为遗留代码提供高覆盖率。可以对测试进行优化,以最小的测试用例集产生最高的覆盖率,或者通过更稳定和可维护的测试套件产生略小的覆盖率。
未覆盖的代码块
通常会存在一些针对代码库的测试,但没有足够的测试来覆盖所有条件。主流代码虽然进行了测试,但并未覆盖边缘情况或错误条件。
Parasoft Jtest能够直观地显示测试了哪些代码块,哪些没有被测试,并提供特定于上下文的操作来创建一个测试用例,专门覆盖了指定的未覆盖的代码行。该操作创建一个测试用例,使用强制测试执行给定代码行所需的特定值初始化所有对象和mock。
Parasoft开发了Parasoft Jtest的单元测试助手,来提高单元测试的效率,因为作为一个专门从事智能测试自动化的团队,我们知道单元测试是创建安全、可靠、合规和高质量软件的重要步骤。
自从我们发布了带有单元测试助手的Parasoft Jtest以来,客户告诉我们,Parasoft Jtest将创建和维护单元测试所需的时间减少了将近50%。我期待您的尝试,并分享您使用Parasoft Jtest的经验,以大幅减少创建和维护单元测试所需的时间。
Nathan是Parasoft的开发总监。自2000年以来一直在Parasoft工作。Nathan和他的团队开发了UI测试(Selenic)、API测试(SOAtest)、服务虚拟化(Virtualize)和单元测试(Jtest)等领域的产品功能。