学习.py
def multiply(a, b):
return a * b
def addition(a, b):
return a + b
Run Code Online (Sandbox Code Playgroud)
test_learning.py
import unittest
from learning import *
class Test(unittest.TestCase):
def test_multiply(self):
self.assertEqual( multiply(3,4), 12)
def test_addition(self):
self.assertEqual( addition(5,10), 15)
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
50% 的代码覆盖率
虽然两种方法都经过测试,但是代码覆盖率都是50%
C:\>coverage run learning.py test_learning.py
C:\>coverage report
Name Stmts Miss Cover
------------------------------
learning 4 2 50%
Run Code Online (Sandbox Code Playgroud) 我们有一个 django 项目,它使用unittest-xml-reporting为竹子提供有关测试结果的 xml 文件。我们想集成django-nose来测试代码覆盖率。但是由于 django 测试需要一个TEST_RUNNER类,我不知道如何并行使用这两个功能(实际上不重叠):
用于 unittest-xml-reporting
TEST_RUNNER = 'xmlrunner.extra.djangotestrunner.XMLTestRunner'
Run Code Online (Sandbox Code Playgroud)
对于 django-nose
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
Run Code Online (Sandbox Code Playgroud)
我试图进入代码,但编写某种黑客来将类连接在一起似乎很麻烦。还剩下什么选择?
我在一个非源构建上运行 gcovr (3.3),例如:
gcovr --root=/path/to/source --object-directory=/path/to/build
现在我想从报告中排除两个不同的内容:
1) 任何.cpp名称中包含“Test”的文件
--exclude='.*Test.*' 似乎不起作用
2)目录中的所有源文件(比如/path/to/source/MyModule/)
--exclude='/path/to/source/MyModule/.*' 似乎不起作用。
--exclude-directories='/path/to/source/MyModule' 似乎也不起作用。
我的问题
a)什么是--exclude-directories因为看起来你(应该)能够排除一个传递给正确正则表达式的目录--exclude?
b) 关于为什么--excludes 不能按预期工作的任何建议?也许这些不是正确的正则表达式类型/风格?
我有一个代码实现,它遍历 anobject的属性。
for (const prop in obj) {
propsMap[prop] = prop;
}
Run Code Online (Sandbox Code Playgroud)
但正如状态一样,我的 IDE (WebStorm) 建议我添加一个属性检查,obj.hasOwnProperty(prop)以避免迭代不存在的属性:
for (const prop in obj) {
if (obj.hasOwnProperty(prop)) {
propsMap[prop] = prop;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当前的测试总是伴随着obj.hasOwnProperty(prop)存在true,并且覆盖率不是我能得到的最好的,我不知道如果obj实际上没有属性会发生什么prop。
我想istanbul将从客户端获取的 JSON 格式的覆盖率报告文件转换为 html 格式。目前我正在使用remap-istanbul这个,但实际上那个特定的工具旨在为最初用不同语言(如打字稿)编写的代码重新映射覆盖率数据。
所以我想是否有更方便的方法来做同样的事情
我已阅读codecov/example-gradle,但不确定如何将其转换为 Kotlin DSL。
我的.travis.yml:
language: java
jdk:
- openjdk11
before_install:
- chmod +x gradlew
- chmod +x gradle/wrapper/gradle-wrapper.jar
script:
- ./gradlew test
- ./gradlew codeCoverageReport
after_success:
- bash <(curl -s https://codecov.io/bash)
Run Code Online (Sandbox Code Playgroud)
我的build.gradle.kts:
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.2.71"
jacoco
maven
}
repositories {
mavenCentral()
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-engine:5.3.1")
}
tasks {
"test"(Test::class) {
useJUnitPlatform()
}
// Task with name 'codeCoverageReport' not found in root project ''.
"codeCoverageReport"(JacocoReport::class) {
executionData(fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec"))
subprojects.onEach { …Run Code Online (Sandbox Code Playgroud) 我对 go 中的集成测试有一个非常特殊的要求。在过去的几天里,我阅读了许多博客,但我无法获得此问题的解决方案。如果您在下面做过任何事情,请与我分享。
基础设施详情:
我的确切要求是:
提前致谢!!
我使用以下教程https://proandroiddev.com/unified-code-coverage-for-android-revisited-44789c9b722f在我的 Android 项目中实现了 Jacoco,以满足 kotlin 类中的测试覆盖率。
由于某些未知原因,它没有报告在 Companion 块下声明的静态方法的覆盖率。
class Meh {
companion object {
fun test () {
// logic to test
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将类转换为实例而不是单例,则我可以完全看到覆盖范围。
有没有人遇到过这个问题?你做了什么?
我有 jenkins 文件,它具有 publishHTML 方法来生成带有 jacoco 结果的 .html 文件的报告。是否可以在仪表板上显示该报告,例如“测试趋势结果”?
最近的操作系统升级使我的覆盖脚本惨遭失败。
lcov 1.13
gcov (GCC) 9.1.1
我的 CMake 中用于生成覆盖率数据的部分:
if ($ENV{COVERAGE})
message("Setting up for coverage")
enable_testing()
include(CodeCoverage)
setup_target_for_coverage(${PROJECT_NAME}_coverage tests coverage)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
endif ()
Run Code Online (Sandbox Code Playgroud)
lcov我在构建测试后发出的命令:
lcov --capture --directory build/ --output-file coverage.info
不幸的是现在失败了:
Capturing coverage data from build/
Found gcov version: 9.1.1
Scanning build/ for .gcda files ...
geninfo: WARNING: no .gcda files found in build/ - skipping!
Finished .info-file creation
Run Code Online (Sandbox Code Playgroud)
错误消息是有道理的,因为没有.gcda文件 - 只有.gcno文件。我不确定它们是否具有相同的目的和/或可以与lcov.
我发出了nm some_binary | grep gcov,有很多符号的形式:
00000000004b3520 d …Run Code Online (Sandbox Code Playgroud) code-coverage ×10
c++ ×2
jacoco ×2
javascript ×2
kotlin ×2
unit-testing ×2
android ×1
cmake ×1
codecov ×1
coverage.py ×1
django ×1
django-nose ×1
gcov ×1
gcovr ×1
go ×1
gradle ×1
istanbul ×1
jasmine ×1
jenkins ×1
junit ×1
lcov ×1
python ×1
tdd ×1