Diffblue与EvoSuite工具使用对比

目录

两工具对比结论如下

Diffblue

使用方法

使用此插件的前提条件

不过自动生成单元测试用例还是很香的

EvoSuite

使用方法

分析一下生成的测试用例

把EvoSuite Test和人工的Test分开


两工具对比结论如下

Diffblue(Community)

EvoSuite

基本信息

使用方法

IDEA安装插件后重启即可

需要手动配置pom

生成用例时间

(不到10秒,不过这可能是依赖项目大小编译速度

(同样的源码工程,EvoSuite花了18分钟)

生成用例位置

src/test中

生成一个隐藏文件夹.evosuite,用例都在这里面

测试用例数量

一般

很多

测试用例质量

可以直接运行(可能会出现包引用不到)

生成的用例精确度不高,执行的时候报错较多,且出错位置不是断言错误比较多

操作范围

可以对指定类/方法进行单独生成测试用例操作

(专业版支持对包生成测试用例)

对整个项目源码进行扫描生成测试用例

(目前不知道这个工具能不能实现指定类/方法来自动生成测试用例,有兴趣可以调查调查)

测试用例规范

测试路径

与源码一致

与源码一致

测试类名

源码类名+Test

源码类名+_ESTest

测试基类

无@Before等

源码类名+_ESTest_scaffolding

测试用例名

test+方法名(同名用例名补数字区分)

以test00、test01....命名

测试用例类型

基本都是功能验证

除功能验证外,还会生成关于异常参数的用例校验

特殊API

无返回值无参数的API

生成无断言的测试用例

生成无断言的测试用例

抛异常的API

对应测试用例抛同样的异常

所有用例,不论有没有异常,都会throws Throwable

private的API

不生成测试用例

不生成测试用例

你有我没有

timeout

所有用例都加了(timeout = 4000)

支持指定类/方法重复生成用例

支持,重复用例类名以数字区分,用例内容一模一样

-

Diffblue

使用方法

IDEA中Setting -> Plugins -> 搜索Diffblue -> Install -> ReStart

使用此插件的前提条件

https://docs.diffblue.com/getting-started/intellij/cover-intellij-plugin/

  1. 支持的开发工具是IntelliJ

     IntelliJ IDEA的插件库里面可以搜到Diffblue,但是Android Studio里面没有

     (不过在AS里面意外发现了插件Unit Test Coverage History runner,可以帮忙只执行指定方法的所有相关的单元测试用例)

  2. 支持Maven或Gradle项目,不支持Android项目

不过自动生成单元测试用例还是很香的

找了一个maven项目,试了几次自动生成用例

  1. 用例生成很快(不到10秒,不过这可能是依赖项目大小编译速度

  2. 自动生成的单元测试用例大概率都可以直接运行(可能会出现import错误,需要人工解决)

  3. 生成的单元测试类名为被测类名+Test,在Test下面,其余路径与被测类路径一致

  4. 测试用例名为test+方法名,若一个方法生成多个测试用例的话在用例名最后加上数字区分

     

  5. 可以根据类/方法来进行生成测试用例

  6. 允许重复生成指定类或者方法的单元测试用例,但是内容一样

  7. 一个被测类只会有一个测试类,但是一个方法会对应多个测试用例(用例名最后加数字区分)

  8. 针对无参且无返回值的方法,不会生成有断言的测试用例

  9. 识别到抛异常的方法,对应测试用例也会做抛异常的动作

  10. 很重要的一点:生成的用例都是验证基本功能的,需要人工梳理补充其他测试类型的用例(可能还会包括少量基本功能用例)

EvoSuite

使用方法

以maven项目为例

  1. pom.xml中引入EvoSuite插件后,同步刷新一下maven仓库

    <plugin>
      <groupId>org.evosuite.plugins</groupId>
      <artifactId>evosuite-maven-plugin</artifactId>
      <version>1.0.6</version>
    </plugin>
  2. 然后执行命令检查一下是否引入成功

    mvn evosuite:help

    成功打印如下

    [INFO] Scanning for projects...
    [INFO] 
    [INFO] ----------------< io.diffblue.corebanking:CoreBanking >-----------------
    [INFO] Building CoreBanking 1.0.0
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO] 
    [INFO] --- evosuite-maven-plugin:1.0.6:help (default-cli) @ CoreBanking ---
    [INFO] Maven Plugin for EvoSuite 1.0.6
      Plugin used to run EvoSuite to automatically generate high coverage JUnit
      tests
    ​
    This plugin has 7 goals:
    ​
    evosuite:clean
      Remove all local files created by EvoSuite so far
    ​
    evosuite:coverage
      Execute the manually written test suites (usually located under src/test/java)
      and return the coverage of each class.
    ​
    evosuite:export
      When run, EvoSuite generate tests in a specific folder. New runs of EvoSuite
      can exploit the tests in such folder, and/or modify them.
      
      So, with 'export' we can copy all generated tests to a specific folder, which
      by default points to where Maven searches for tests. If another folder is
      rather used (or if we want to run with Maven the tests in the default EvoSuite
      folder), then Maven plugins like build-helper-maven-plugin are needed
    ​
    evosuite:generate
      Generate JUnit tests
    ​
    evosuite:help
      Display help information on evosuite-maven-plugin.
      Call mvn evosuite:help -Ddetail=true -Dgoal=<goal-name> to display parameter
      details.
    ​
    evosuite:info
      Obtain info of generated tests so far
    ​
    evosuite:prepare
      Mojo needed to prepare the EvoSuite tests for execution. This is needed to
      make sure that bytecode is properly instrumented.
    ​
    ​
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  0.501 s
    [INFO] Finished at: 2021-08-21T17:26:15+08:00
    [INFO] ------------------------------------------------------------------------
  3. 执行一下命令,生成UT代码

    mvn evosuite:generate

  4. 生成的测试用例在.evosuite/best-tests中

  5. 执行以下命令,可以把.evosuite/best-tests中用例cp到src/test/java中

    mvn evosuite:export
  6. 直接运行即可

分析一下生成的测试用例

  1. 需要人工配置(pom)

  2. 很慢,同样的源码工程,EvoSuite花了18分钟

  3. 生成的测试用例不在src下,需要手动cp

  4. 生成的测试用例路径与源码一致

  5. 测试类名以被测类名_ESTest组合

     
  6. 测试用例类名以test00、test01命名,没有标识度

  7. 针对同一套源码,测试用例量比较大

  8. 生成的用例不仅仅有基本功能的,还会做一些异常的校验

  9.  生成的测试套件基本都会对应生成scaffolding

  10. 生成的用例精确度不高,执行的时候报错较多,且出错位置不是断言

  11. 所有用例,不论有没有异常,都会throws Throwable

  12. 所有用例都加了(timeout = 4000)

  13. 针对无参且无返回值的方法,不会生成有断言的测试用例

把EvoSuite Test和人工的Test分开

  1. 如果想把自己写的Test和EvoSuite Tests分开,先从src/test/java 中删除所有之前export过来的EvoSuite Test

    mvn evosuite:help -Ddetail=true -Dgoal=export
  2. 通过运行下面的命令,我们可以知道export goal的详细用法:

                 得到如下信息:

    Available parameters:
    ​
        targetFolder (Default: src/test/java)
          
          User property: targetFolder
  3. 有两种方式来配置targetFolder:(任选一种)
    1. 直接修改export 命令
      mvn evosuite:export -DtargetFolder=src/test/evosuite
    2. 修改pom.xml文件,在<project>节点下下,添加<properties> 配置:
      <properties>
        <targetFolder>src/test/evosuite</targetFolder>
      </properties>

      再次运行:

      mvn evosuite:export
  4. 执行完上面其中一种方式,你会发现tests 被exported到src/test/evosuite 如果现在去运行mvn test,你会发现src/test/evosuite的Tests不会被包含到测试中,需要做如下配置:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.8</version>
       <executions>
         <execution>
           <id>add-test-source</id>
           <phase>generate-test-sources</phase>
           <goals>
             <goal>add-test-source</goal>
           </goals>
           <configuration>
              <sources>
                <source>${targetFolder}</source>
              </sources>
           </configuration>
        </execution>
      </executions>
    </plugin>
  5. 再次执行mvn test,log中会看到 EvoSuite Test也一起被执行了

把EvoSuite Test和程序员写的Test一起运行

如果手写的tests和EvoSuite Test运行在相同的进程中,它们就会使用相同的执行容器版本。 为了确保执行容器只能激活EvoSuite tests,我们需要增加一个初始化Listener:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.17</version>
   <configuration>
     <properties>
       <property>
          <name>listener</name>
          <value>org.evosuite.runtime.InitializingListener</value>
      </property>
     </properties>
  </configuration>
</plugin>

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: diffblue cover是一种自动化软件测试工具使用人工智能技术来生成软件的测试用例。它能够从源代码中自动识别出相关的测试需求,并自动生成适当的测试案例。diffblue cover还可以通过生成各种类型的测试用例来覆盖不同的代码路径,提供了全面的测试覆盖率。这个工具使用可以大大减少软件测试的工作量和时间,提高测试效率和质量。 diffblue cover的关键特点是自动化。它能够快速地分析源代码,理解代码逻辑和功能,并基于这些信息生成针对代码的测试用例。这样的自动化过程可以显着减少手动编写测试用例的时间和精力,提高开发人员的工作效率。此外,diffblue cover还具有智能化的能力,能够根据源码的特点生成最合适的测试用例,提供更全面的测试覆盖。 除了自动生成测试用例,diffblue cover还提供了一些额外的功能。例如,它可以与持续集成系统集成,以便在每次代码提交时自动运行测试用例。此外,diffblue cover还支持云端部署,这意味着用户可以随时随地使用它,并且不需要额外的硬件或软件资源。 总之,diffblue cover是一种强大的自动化软件测试工具,它利用人工智能技术和自动生成测试用例的能力,减少了测试工作的工作量和时间,提高了测试的效率和质量。它的智能化和自动化功能使之成为开发人员的有力助手,帮助他们提供更可靠和稳定的软件产品。 ### 回答2: Diffblue Cover 是Diffblue 公司开发的一款自动化测试工具。它使用人工智能和自动化技术,帮助软件开发人员快速创建和维护高质量的单元测试Diffblue Cover的核心功能是自动生成测试代码。它可以分析现有的代码库,了解代码逻辑和要求,并为每个函数或方法生成相应的测试代码。这些测试代码可以验证代码的正确性、可靠性和稳定性,从而提高代码质量。 Diffblue Cover 还可以自动更新测试代码。在代码库发生更改时,Diffblue Cover可以很快地检测到,并相应地更新测试代码,确保测试的完整性和准确性。这极大地减轻了软件开发人员的负担,节省了时间和精力。 Diffblue Cover 还支持多种编程语言,包括Java、C#、C和C++等。这使得它可以应用于不同类型的软件开发项目。 总之,Diffblue Cover 是一款强大的自动化测试工具,可以大大提高软件开发的效率和质量。通过自动生成和更新测试代码,它减轻了开发人员的负担,同时可以快速发现和修复潜在的代码问题。使用Diffblue Cover,开发人员可以更专注于开发创新和高质量的软件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值