首页 > 解决方案 > 使用 cmake/ctest 随机化单元测试

问题描述

我管理一个非常大的开源项目,其中包含许多单元测试(约 200 个文件),并且通过所有测试对于持续集成来说非常耗时。我们使用 cmake/ctest/Catch2 作为单元测试框架。

有没有办法告诉 cmake/ctest 只构建和运行单元测试的随机子集(例如只有 30%)?

当对给定功能的代码进行多次提交迭代时,所有被检查的测试的概率趋于一个,但每个单独的提交会更快。

显然,在准备 PR 或发布时,该比率将设置为 100%。

标签: unit-testingcmakectest

解决方案


另类的

最后,我想出了一个 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我有全局变量(可以在cmakeCLI/GUI 中设置)

SET(THRESHOLD_RANDOM_TESTING "100" CACHE INTERNAL "~% of unit tests to build and run.")

每次我重新生成项目时,都会构建一个新的随机选择。


推荐阅读