如何在运行时选择CPPUnit中的单元测试子集?

时间:2010-05-06 19:02:20

标签: cppunit

我使用CppUnit作为单元测试框架。是否可以选择要在运行时执行的测试用例子集?

CppUnit中是否提供了过滤选项来容纳这个?

3 个答案:

答案 0 :(得分:5)

你可能在main()中调用的TestRunner :: run()方法实际上有可选参数:run(std :: string testName =“”,bool doWait = false,bool doPrintResult = true,bool doPrintProgress = true )。 testName必须是测试的特定名称。如果需要,您可以按名称请求特定测试。您还可以在特定测试或runTestByName(testName)上调用runTest(Test *)。

但听起来你想变得更加成熟。假设您使用CPPUNIT_TEST_SUITE_REGISTRATION()宏注册了所有测试,静态TestFactoryRegistry :: makeTest()方法将返回所有已注册测试的TestSuite。

TestSuite对象通过getTests()方法生成一个向量。您可以遍历这些,将它们的名称与regexp(或索引号或您想要的)匹配,而不是像大多数人那样在整个套件上调用TestRunner :: addTest(registry.makeTest()),您只需添加您要求的具体测试。

你必须写一些东西来迭代测试并进行匹配,但除此之外它应该是简单的。可能有十几行代码,还有解析命令行参数。使用正则表达式让自己更简单。

答案 1 :(得分:1)

如果您使用GUI test runner表示cppunit,您只需检查要运行的测试。

如果您无法使用GUI测试运行器,请查看this帖子 - 它描述了一种“可配置”方式,用于定义基于xml文档运行的测试(最后一篇文章或多或少地描述了解决方案)最后)。

答案 2 :(得分:0)

另一种方法:

i1 <- setDT(df2)[, .I[seq(which(c(diff((status %in% "a") + 
              rleid(is.na(status))) > 1), FALSE))]  , id]$V1
df2[-i1]
#     id status otherVar
# 1:  1      a        b
# 2:  1      c        c
# 3:  1      a        d
# 4:  2     NA        e
# 5:  2      b        f
# 6:  2      c        g
# 7:  2      c        h
# 8:  3      a        k
# 9:  3      c        l
#10:  4     NA        m
#11:  4     NA        n
#12:  4      b        o
#13:  4      b        p