我的项目结构类似:
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 logic.cpp\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 logic.h\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 logic_test.cpp\nRun Code Online (Sandbox Code Playgroud)\n\n主要CMakeLists.txt文件是:
cmake_minimum_required (VERSION 2.8)\nproject (Logic)\nset (Logic_SOURCES ${PROJECT_SOURCE_DIR}/src/logic.cpp)\ninclude_directories (${PROJECT_SOURCE_DIR}/src)\nadd_library (logic SHARED ${Logic_SOURCES})\nadd_subdirectory (test)\nRun Code Online (Sandbox Code Playgroud)\n\n对于CMakeLists.txt测试来说是:
find_package (GTest)\nset (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -march=native -mtune=native -fprofile-arcs -ftest-coverage")\nset (CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")\nset (Test_SOURCES ${Logic_SOURCES} ${PROJECT_SOURCE_DIR}/test/logic_test.cpp)\nadd_executable (logic_test ${Test_SOURCES})\ntarget_link_libraries (${TestName} gtest gtest_main gcov pthread)\nRun Code Online (Sandbox Code Playgroud)\n\n为了处理测试覆盖率报告,我已将自定义目标添加到test/CMakeLists.txt:
set (Coverage_REPORT ${PROJECT_BINARY_DIR}/coverage.info)\nset (Coverage_DIR ${PROJECT_BINARY_DIR}/coverage)\nadd_custom_command (\n OUTPUT ${Coverage_REPORT}\n COMMAND lcov -q -c -f -b . -d ${PROJECT_BINARY_DIR}/test …Run Code Online (Sandbox Code Playgroud) 我有一个make选项指定为
gcc -fprofile-arcs -ftest-coverage -fPIC -fprofile-dir="./build" test.c -o build/test.out
Run Code Online (Sandbox Code Playgroud)
使用以上选项,gcda文件将移动到构建目录,但文件不会移动到目录gcno。
我们如何将gcno文件移动到build文件夹?
这可能是一个相当简单的问题,但我很茫然。
我有一个if语句,如下所示:
if(TheEnum.A.equals(myEnum) || TheEnum.B.equals(myEnum))
Run Code Online (Sandbox Code Playgroud)
TheEnum可以A,B,C,... G(不止4个选项)。
JaCoCo(SONAR)告诉我这里有四个条件。那些是什么?从本质上讲,我不是可以测试的整套设备
if(true || not_evaluated) => true
if(false || true) => true
if(false || false) => false
Run Code Online (Sandbox Code Playgroud)
我敢肯定我不能专门测试
if(true || true)或
if(true || false),因为短路评估不会那么远...?
如果是这样,JaCoCo / Sonar要我测试的第四个选项是什么?
我有一个经典的 SWIG 设置,其中从 Python 调用一堆 C++ 函数。现在,在添加一些测试(在 Python 中)之后,我想获得 C++ 源代码的测试覆盖率。经典的Python方法是
nosetests --with-coverage --cover-package=mypackage
Run Code Online (Sandbox Code Playgroud)
但这仅适用于本机 Python 模块。事实上,这将返回mypackage.pySWIG 生成的文件的覆盖范围。
由于我需要覆盖 C++ 文件(/SWIG 生成的共享库),因此--coverage肯定需要添加编译和链接器标志。但不知道从那里去哪里。
有什么提示吗?
我右键单击我的 LoginActivityTest 文件并选择Run LoginActivityTest,它运行并完成了所有测试。
现在我想在覆盖范围内运行它。然后,我右键单击 LoginActivityTest 文件并选择Run LoginActivityTest with Coverage,花了一些时间来构建它,然后输出以下内容:
---- IntelliJ IDEA coverage runner ----
sampling ...
include patterns:
com\.example\.ui\.login\..*
exclude patterns:
Process finished with exit code 1
Class not found: "com.example.ui.login.LoginActivityTest"Empty test suite.
Run Code Online (Sandbox Code Playgroud)
有人有同样的问题吗?我错过了什么吗?我怎样才能让它在测试覆盖范围内运行?
我正在尝试使用 Sonarqube 7 获得每个测试功能的覆盖率。
我正在使用 jacoco-maven-plugin 并且我的测试正在使用 JUnit 5 运行。
我成功地在 Sonarqube 仪表板上获得了全球覆盖,但我想通过能够查看哪些测试覆盖了我的课程的哪些行来更深入。
我在这里尝试了给定的配置,但没有成功:我在日志中收到以下消息“没有关于每个测试的覆盖率的信息”。我看到这可以通过添加一个 listener 来获得org.sonar.java.jacoco.JUnitListener,但它是一个 JUnit 4 监听器,所以我想它因此不起作用。
我如何才能使每个测试功能的 Coverage 与 JUnit 5 一起使用?
当我运行代码覆盖率时,包含 jest 配置的根目录内的代码工作正常,但对于根目录外的代码测试用例通过,但在覆盖率报告中,它显示根目录外的所有测试文件的百分比为零。
jest.config.js文件位于 explorebook 文件夹内。
|---core
| |--components
| |--test
| |--jest.setup.suites.js
|---explorebook
| |--components
| | |--test
| |--package.json
| |--jest.config.js
| |--jest.setup.suites.js
|---framework
| |--commons
| |--test
| |--jest.setup.suites.js
|
Run Code Online (Sandbox Code Playgroud)
笑话配置.js
const TEST_FILES_REGEX = '(/test/.*|(\\.|/)(test|spec))\\.js$';
module.exports = {
verbose: false,
roots: [
'<rootDir>/',
'<rootDir>/../core/',
'<rootDir>/../framework/commons/'
],
collectCoverage: true,
collectCoverageFrom: [
'components/**/*.js',
'<rootDir>/../core/components/**/*.js'
'<rootDir>/../framework/commons/*.js'
],
coverageDirectory: 'reports/coverage',
coverageReporters: [
'lcov',
'text'
],
setupFiles: [ '<rootDir>/jest.setup.suites.js',
'<rootDir>/../core/jest.setup.suites.js',
'<rootDir>/../framework/jest.setup.suites.js' ],
setupTestFrameworkScriptFile: path.join(__dirname, 'jest.setup.tests.js'),
testEnvironment: 'jsdom',
testRegex: TEST_FILES_REGEX
}; …Run Code Online (Sandbox Code Playgroud) 我可以通过mypy生成类型“覆盖”报告
mypy . --html-report mypy-report
Run Code Online (Sandbox Code Playgroud)
以及带有pytest-cov的 pytest 覆盖率报告
pytest --cov=app --cov-report=html
Run Code Online (Sandbox Code Playgroud)
有没有办法将两个报告结合起来?我会对既没有被单元测试也没有被 mypy 覆盖的代码感兴趣。
希望在玩笑覆盖范围中忽略这部分代码
/* istanbul ignore next */
async middleware(
req: Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>,
_res: Response<any, Record<string, any>>,
next: NextFunction
) {
const { email, password } = req.body
await validate({ email, password })
next()
}
Run Code Online (Sandbox Code Playgroud)
我尝试过,/* istanbul ignore next */但似乎不起作用
我正在实现 VSCode 扩展。我按照此链接设置了该项目。
它生成一个带有src/test/runTest.ts文件的启动项目:
import * as path from 'path';
import { runTests } from '@vscode/test-electron';
async function main() {
try {
// The folder containing the Extension Manifest package.json
// Passed to `--extensionDevelopmentPath`
const extensionDevelopmentPath = path.resolve(__dirname, '../../');
// The path to test runner
// Passed to --extensionTestsPath
const extensionTestsPath = path.resolve(__dirname, './suite/index');
// Download VS Code, unzip it and run the integration test
await runTests({ extensionDevelopmentPath, extensionTestsPath });
} catch (err) {
console.error('Failed to …Run Code Online (Sandbox Code Playgroud)