我使用Cobertura Maven插件进行我的一个项目.但我对生成的报告有疑问:
线路和分支覆盖范围有什么区别?
有没有办法在根pom中运行所有测试并在Intellij Idea中收集测试覆盖率?
我目前正在使用Java与Play框架.我有JUnit测试,我试图用IntelliJ覆盖运行器测量覆盖率.
不幸的是,Play会生成一些垃圾类,IntelliJ会在报告中包含它们.有没有办法从覆盖率报告中排除某些模式?
今天我的任务是将单元测试覆盖率分析添加到我们的代码库中.今天也是iOS 7.1与XCode 5.1一起发布的日子.从发行说明:
用于代码覆盖测试的gcov工具已重新实现.新版本使用LLVM项目中的llvm-cov工具.对于所有重要功能,它在功能上等同于旧版本.Xcode中gcov的位置也已移动,使用xcrun来调用它.如果您发现问题,请提交错误报告.对于此版本,您仍然可以使用GCC的旧版gcov,它以gcov-4.2的形式提供.11919694已更新
我只是在遵循几篇教学 博客 文章后才意识到这一点,正确设置我的环境 - 在测试时在模拟器的构建文件夹中生成.gcda/.gcno文件 - 并且在此处生成报告生成工具尝试将它们解析为报告.(这是一个./getcov脚本,它收集您的环境变量以传递给lcov-1.10脚本以生成报告)
第一个障碍是新的捆绑gcov程序不支持-v获取版本的参数,这是lcov初始化的第一步.看起来就像一个非首发,但是阅读上面的发行说明我修改了lcov脚本以使用旧gcov-4.2版本并解决了问题.
但是,lcov在处理我的覆盖数据文件时很早就出错了.这会在我的项目中按字母顺序生成一个可能包含前10个文件的报告.不是特别有用.错误输出是最小的,也是无益的:
geninfo:错误:GCOV(build_artifacts)/(class_that_errored).gcda失败了!
我修改了lcov脚本以打印它所获得的错误(11遗憾的是,它只能在gcov(-io).c代码中找不到任何引用)并继续操作而不是退出,所以我留下了更多报告中的文件,但仍有85%的源文件出错,如上所述.
我能够在报告中成功结束的文件与发生错误的文件之间辨别的唯一模式是任何使用内联块声明的文件都失败了.没有任何传递过的文件以任何方式阻止,我检查过的所有文件都包含块.奇怪.
后来我想通了,我可以在打开单个文件.gcda 封面,其中包括曾在出错的那些lcov脚本.在coverage报告下面的消息窗口中,所有出错的文件都有警告消息:
(class_that_errored).gcno:'__copy_helper_block_'没有行
(class_that_errored).gcno:'__destroy_helper_block_'没有行
在这一点上我最好的假设是新的XCode 5.1生成.gcda文件,旧gcov-4.2程序没有配备有关块声明的处理.
但是我已经筋疲力尽了我想要尝试的一切,所以我在这里询问是否有人知道我错过了什么,或者有什么想法可以进一步调试.或者,如果有人成功测量了今天的XCode 5.1更新后的测试覆盖率gcov,我很想知道你必须做出的任何改变.
我正在尝试生成Jacoco代码覆盖率报告.我已经在我的测试类中使用了AndroidTestCase.
我发现使用testCoverageEnabled为true并使用默认的android -studio默认jacoco,./ gradlew connectedCheck或createDebugCoverageReport创建成功/失败测试用例的百分比,但没有覆盖率报告.
然后我尝试了jacoco {toolVersion"0.7.1.201405082137"}和任务jacocoTestReport(类型:JacocoReport,dependsOn:"testDebug").我试图用各种任务来改变dependsOn值.该报告显示0(零)测试覆盖率,这是不可能的,因为至少有一半的类被测试.
在过去的几天里,我已经跟踪了堆栈溢出的各种接受的答案.结果是否定的.
我的gradle文件:
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
}
}
apply plugin: 'com.android.application'
apply plugin: 'jacoco'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "test.gradle.com.myapplicationtestgradle"
minSdkVersion 21
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(
'proguard-android.txt'), 'proguard-rules.pro'
}
debug {
testCoverageEnabled true
}
}
jacoco {
version "0.7.1.201405082137"
}
packagingOptions {
exclude 'LICENSE.txt'
}
}
jacoco {
toolVersion "0.7.1.201405082137"
} …Run Code Online (Sandbox Code Playgroud) 我正在使用coverage.py来获取代码的测试覆盖率。
假设我在两个不同的模块中有两个同名的函数
# foo/foo.py
def get_something():
# fetch something
# 10 line of branch code
return "something foo/foo.py"
# bar/foo.py
def get_something():
# fetch something
# 20 line of branch code
return "something bar/foo.py"
Run Code Online (Sandbox Code Playgroud)
如何bar.foo.get_something(...)“完全”排除该功能?
我正在尝试用来go test -cover衡量我正在建设的服务的测试覆盖率.它是一个REST API,我通过旋转它来测试它,发出测试HTTP请求并查看HTTP响应.这些测试不是服务包的一部分,并go tool cover返回0%的测试覆盖率.有没有办法获得实际的测试覆盖率?我希望在给定端点上进行最佳案例测试,以覆盖特定端点处理程序的至少30-50%的代码,并通过添加更多常见错误测试来进一步改进.
我一直试图在一段时间内安静地进行Jacoco测试覆盖.我在这些主题中尝试了几种可能的解决方案:
使用JaCoCo Gradle插件的Android测试代码覆盖率
如何使用Android gradle插件0.10.0或更高版本获取jacoco覆盖率报告?
我正在使用genymotion在一个emulatated设备中运行测试.这是我添加到build.gradle的内容:
apply plugin: 'jacoco'
android{
jacoco {
version "0.7.1.201405082137"
}
buildTypes{
debug{
testCoverageEnabled = true
}
}
}
jacoco {
toolVersion "0.7.1.201405082137"
}
Run Code Online (Sandbox Code Playgroud)
要运行它,我会使用类似的东西
./gradlew clean
./gradlew createFLAVOR_NAMEDebugCoverageReport
Run Code Online (Sandbox Code Playgroud)
相关生成的文件/文件夹是:
/build/intermediates/coverage-instrumented-classes
/build/intermediates/jacoco
/build/outputs/code-coverage/connected/flavors/MyFlavor/coverage.ec
Run Code Online (Sandbox Code Playgroud)
但是,@ build/reports/jacoco/test/html/index.html或任何html页面/代码覆盖率报告@/build/outputs都没有.
我还尝试创建一个专门的任务来构建一个覆盖率报告:
def coverageSourceDirs = [
'src/main/java',
]
task jacocoTestReport(type: JacocoReport, dependsOn: "connectedAndroidTestFLAVOR_NAMEDebug") {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir: './build/intermediates/classes/debug',
excludes: ['**/R*.class', …Run Code Online (Sandbox Code Playgroud) 有一个很大的javascript库(大约40 000行代码)和一个使用不到50%的库代码的应用程序.
有一个测试利用了库中所需的所有功能,可以生成覆盖率报告.
如何以编程方式删除依赖于测试的每个未使用的代码行?
注意:覆盖率报告包含已执行但不准确的行的索引:忽略右括号,即使方法体不是等,也会将带有方法名称的行标记为已执行.
我应该关心我的测试如何涵盖我在项目中使用的外部库吗?
py.test --cov显示所有文件的覆盖方式,包括我的virtualenv目录中的文件.如何使输出仅显示我编写的模块的覆盖范围?
test-coverage ×10
android ×2
jacoco ×2
maven ×2
testing ×2
cobertura ×1
coverage.py ×1
gcov ×1
go ×1
gradle ×1
javascript ×1
lcov ×1
minify ×1
optimization ×1
pytest ×1
python ×1
python-2.7 ×1
virtualenv ×1
xcode ×1
xcode5.1 ×1