我使用CppUnit作为单元测试框架。是否可以选择要在运行时执行的测试用例子集?
CppUnit中是否提供了过滤选项来容纳这个?
答案 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