unit-testing - 使用 cmake/ctest 随机化单元测试
问题描述
我管理一个非常大的开源项目,其中包含许多单元测试(约 200 个文件),并且通过所有测试对于持续集成来说非常耗时。我们使用 cmake/ctest/Catch2 作为单元测试框架。
有没有办法告诉 cmake/ctest 只构建和运行单元测试的随机子集(例如只有 30%)?
当对给定功能的代码进行多次提交迭代时,所有被检查的测试的概率趋于一个,但每个单独的提交会更快。
显然,在准备 PR 或发布时,该比率将设置为 100%。
解决方案
另类的
最后,我想出了一个 cmake 解决方案,只需创建一个add_test()
在随机测试时激活测试的新函数:
功能(my_add_test test_file)#optional_avoid_add_test 字符串(随机长度 2 字母“0123456789”_random) if (${_random} LESS ${THRESHOLD_RANDOM_TESTING}) add_executable(${test_file} ${test_file}.cpp) add_test(${test_file} ${test_file}) 万一() 结束函数()
在我的主要cmake
我有全局变量(可以在cmake
CLI/GUI 中设置)
SET(THRESHOLD_RANDOM_TESTING "100" CACHE INTERNAL "~% of unit tests to build and run.")
每次我重新生成项目时,都会构建一个新的随机选择。
推荐阅读
- javascript - Apollo 服务器 2.0 不能与 join-monster-graphql-tools-adapter 和 oracle 一起使用
- modelica - URI 到文件的映射
- git - git push 同一命名空间中的分支
- python - Folium TypeError:输入类型不支持 ufunc 'isnan'
- angular - ReferenceError:元素未定义 Angular Fullcalendar
- c# - 控制 JSON .NET 的参考 ID 生成
- python - 如何在 LDA 模型中获取新文档的主题
- python - 如何从滚动选择框中进行选择
- kotlin - Kotlin:使用地图变换时 {} 和 () 之间的区别?
- mongodb - 如何编写 mongodb 查询以仅从文档数组中查询某个字段?