自动化单元工具EvoSuie的代码覆盖报告

发表于:2019-4-19 15:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Black spider 525    来源:侧者

  EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行。得到了Google和Yourkit的支持。
  生成的测试cases的运行依赖
  由EvoSuite生成的测试cases需要EvoSuite框架的runtime包支持才能进行测试,因此要在工程中加入如下的Maven依赖
  注意:EvoSuite的bytecode instrumentation和类似Jacoco这类工具在bytecode instrumentation上有可能有冲突,导致最后的覆盖率统计都是0
  bytecode instrumentation是改变了编译器上生成的一个类的bytecode,用它可以完成如:计算一个方法被执行需要多长时间、改变它的执行流程等特别的流程。用户可以添加/改变应用程序的字节码,自从有了这个功能后,就不需要修改整个应用程序源。
  EvoSuite的字节码检测
  在EvoSuite的bytecode instrumentation有两种选择如下:
  其一、在EvoSuite的 @RunWith(EvoRunner.class)中,会调用EvoSuite自己的classloader,而在这个过程中就调用它自己提供的bytecode instrumentation来完成对应的分析。这就导致了EvoSuite的bytecode instrumentation是早于其他代码覆盖工具完成。
  其二、EvoSuite会启动一个Java的代理,代理会拦截全部的class loading,然后加入其EvoSuie的bytecode instrumentation。
  EvoSuite目前默认是第一种,但是如果可以使用第二种,测者建议使用第二种,因为第二种可以有效避免和类似Jacoco工具的bytecode instrumentation的冲突,但是如果在测试在代理启动前就执行了,那么就不会起作用了范围会报EvoSuite的错误。
  在使用过程中,如果发现代码覆盖报告全部是0,可以尝试通过一下方式切换上面的两种bytecode instrumentation方式。
  @RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = tr
  修改separateClassLoader = true为false(从方式1 变成方式2),如果一切自效果,那么可以再Maven的pom中加入对应的配置

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号