- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我们的项目中,我们遇到了 JaCoCo 使用 Jenkins 或 SonarQube 计算错误覆盖率的问题。
这是我们通常用于 Jenkins 构建的构建脚本的示例:
<property name="demo" location="."/>
<property name="exec_name" value="build1.exec"/>
<import file= "${demo}/buildscripts/common/product_common_ant.xml"/>
<property name="coverage_data" location="\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName"/>
<target name="testrun" depends="compile" description="Execute tests with coverage">
<jacoco:coverage destfile="${cov_res_file}" append="true">
<testng classpathref="testrun_classpath" suitename="UnitTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
<xmlfileset dir="${test}" includes="builds/unitTests.xml"/>
</testng>
</jacoco:coverage>
<copy file="${test-output}/testng-results.xml" tofile = "${test-output}/unit-test-results.xml"/>
<fail if="testng.failure"/>
<jacoco:coverage destfile="${cov_res_file}" append="true">
<testng classpathref="testrun_classpath" suitename="IntegrationTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
<xmlfileset dir="${test}" includes="builds/integTests_Build.xml"/>
</testng>
</jacoco:coverage>
<copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/integ-test-results.xml"/>
<fail if="testng.failure"/>
<jacoco:coverage destfile="${cov_res_file}" append="true">
<testng classpathref="testrun_classpath" suitename="BUildGUITests1" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
<xmlfileset dir="${test}" includes="builds/funcTests_build_part01.xml"/>
</testng>
</jacoco:coverage>
<copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/gui-test-results.xml"/>
<fail if="testng.failure"/>
</target>
<target name="mergeTestResults" depends="testrun, copyCoverageResults">
<copy file="${buildscripts}/empty-test-results.xml" tofile="${test-output}/testng-merge.xml"/>
<for param="xmlFile">
<path>
<fileset dir="${test-output}" >
<include name="unit-test-results.xml" />
<include name="integ-test-results.xml" />
<include name="gui-test-results.xml" />
</fileset>
</path>
<sequential>
<copy file="${test-output}/testng-merge.xml" toFile="${test-output}/start-merge.xml"/>
<xslt style="${buildscripts}/merge-test-results.xsl"
destdir="${test-output}"
in="${test-output}/start-merge.xml"
out="${test-output}/testng-merge.xml">
<param name="with" expression="@{xmlFile}" />
</xslt>
<delete file="${test-output}/start-merge.xml" />
</sequential>
</for>
</target>
所以有例如在此构建中运行的 3 个套件和覆盖率数据保存到
\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName\buildX.exec
覆盖率构建具有以下脚本
<project name="Product Test Coverage Build" default="report" basedir="..\.." xmlns:jacoco="antlib:org.jacoco.ant">
<echo>Current username: ${user.name}</echo>
<defaultexcludes echo="true"/>
<property name="demo" location="."/>
<property name="src" location="${demo}/src"/>
<property name="bin" location="${demo}/bin"/>
<property name="lib1" location="${demo}/lib"/>
<property name="lib2" location="${demo}/lib64"/>
<property name="coverage" location="${demo}/coverage"/>
<property name="pr11_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part1-64\"/>
<property name="pr12_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part2-64\"/>
<property name="pr13_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part3-64\"/>
<property name="pr14_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part4-64\"/>
<property name="pr15_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part5-64\"/>
<property name="pr16_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part6-64\"/>
<property name="pr17_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part7-64\"/>
<property name="pr18_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part8-64\"/>
<property name="pr19_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part9-64\"/>
<property name="pr21_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part1-64\"/>
<property name="pr22_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part2-64\"/>
<property name="pr23_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part3-32\"/>
<property name="pr24_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part4-64\"/>
<property name="pr25_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part5-64\"/>
<property name="pr26_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part6-64\"/>
<property name="pr27_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part7-32\"/>
<property name="pr28_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part8-64\"/>
<property name="pr210_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part10-64\"/>
<property name="pr31_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product3-Unit-Integ-Tests\"/>
<property name="pr32_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product3-32\"/>
<property name="pr33_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product3-Integration-1\"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpathref="testrun_classpath"/>
<target name="merge" depends ="compile">
<jacoco:merge destfile="${coverage}/merged.exec">
<fileset dir="${pr11_coverage}" includes="*.exec"/>
<fileset dir="${pr12_coverage}" includes="*.exec"/>
<fileset dir="${pr13_coverage}" includes="*.exec"/>
<fileset dir="${pr14_coverage}" includes="*.exec"/>
<fileset dir="${pr15_coverage}" includes="*.exec"/>
<fileset dir="${pr16_coverage}" includes="*.exec"/>
<fileset dir="${pr17_coverage}" includes="*.exec"/>
<fileset dir="${pr18_coverage}" includes="*.exec"/>
<fileset dir="${pr19_coverage}" includes="*.exec"/>
<fileset dir="${pr21_coverage}" includes="*.exec"/>
<fileset dir="${pr22_coverage}" includes="*.exec"/>
<fileset dir="${pr23_coverage}" includes="*.exec"/>
<fileset dir="${pr24_coverage}" includes="*.exec"/>
<fileset dir="${pr25_coverage}" includes="*.exec"/>
<fileset dir="${pr26_coverage}" includes="*.exec"/>
<fileset dir="${pr27_coverage}" includes="*.exec"/>
<fileset dir="${pr28_coverage}" includes="*.exec"/>
<fileset dir="${pr210_coverage}" includes="*.exec"/>
<fileset dir="${pr31_coverage}" includes="*.exec"/>
<fileset dir="${pr32_coverage}" includes="*.exec"/>
<fileset dir="${pr33_coverage}" includes="*.exec"/>
</jacoco:merge>
</target>
<property environment="env"/>
<property name="coverage_rep" location="\\server\jenkins\jobs\Product-Test-Coverage\builds\${env.BUILD_NUMBER}\"/>
<target name="report" depends="merge">
<jacoco:report>
<executiondata>
<file file="${coverage}/merged.exec"/>
</executiondata>
<structure name="Product Overall Code Coverage">
<sourcefiles encoding="UTF-8">
<fileset dir="${src}"/>
</sourcefiles>
</structure>
<html destdir="${coverage}"/>
<csv destfile="${coverage}/report.csv"/>
<xml destfile="${coverage}/report.xml"/>
</jacoco:report>
<copy file="${coverage}/index.html" tofile="${coverage_rep}/index.html"/>
</target>
我已经取出了编译和构建部分。
当 Jenkins 或 SonarQube 运行此脚本时,我们获得的代码覆盖率约为 19%,而在 Eclipse 中本地运行所有测试并使用 Eclemma(与 Jacoco)合并,则代码覆盖率约为 65%(这是更可靠的结果)。
我们的构建在每次 SVN 提交时运行,并在每次运行前进行编译。尽管同时使用 32 位和 64 位架构,但所有测试服务器都使用相同的 Java 版本。
我们在这里做错了什么?
最佳答案
一年多后,代码覆盖率突然又变得正确了。奇怪的是,不幸的是无法找出之前出了什么问题。
关于java - 合并多个构建时代码覆盖率错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40449993/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!