customizing unittest++
customizing unittest++
本文关键字:unittest++ customizing 更新时间:2023-10-16
我问这个问题是希望有人站在我的立场上,有一些想法。可以这么说,是想避免做无谓的重复工作。
我使用unittest++: http://unittest-cpp.sourceforge.net/UnitTest++.html
到目前为止,我已经编写了相当多的测试,并且每次运行测试构建时都执行它们,这当然是意料之中的。我甚至定义了我自己的TestReporter类,它为我提供了关于每个测试的更多信息——它在每个测试的末尾打印了每个测试所花费的时间,并且还具有颜色编码的测试开始和测试结束消息,因此我更容易导航测试输出。但是我已经到了这样一个地步,即测试的绝对数量转储了如此多的输出,以至于我的控制台的缓冲区甚至不再保存前几个测试的结果,并且我厌倦了更改该设置。因此,我希望能够作为运行测试构建的可选参数指定我想运行的测试,并跳过其他测试。
unittest++的代码相当简单,我承认如果我盯着它看的话,我可能会弄清楚,但肯定有人已经弄清楚了吗?我试图想出一种方法来连接我的argv[]与Test::GetTestList()。我想用cmdline参数过滤测试列表,并只运行这些测试。
嗯。看起来只是个链表。我想我可以把它毁了……O(m*n)搜索,m=总测试,n=指定测试。好。我一直在回答我自己的问题。Mods:我会张贴一个答案与我的解决方案的实施。希望能节省20分钟。
编辑:看起来我真的应该使用谓词的东西:
template <class Predicate>
int RunTestsIf(TestList const& list, char const* suiteName,
const Predicate& predicate, int maxTestTimeInMs) const
{
Test* curTest = list.GetHead();
while (curTest != 0)
{
if (IsTestInSuite(curTest,suiteName) && predicate(curTest))
{
RunTest(m_result, curTest, maxTestTimeInMs);
}
curTest = curTest->next;
}
return Finish();
}
这样我就可以直接用RunTestsIf()
。
我的解决方案是:
namespace UnitTest {
class ListFilter {
char **list;
int n;
public:
ListFilter(char **list_, int count) {
list = list_; n = count;
}
bool operator()(const Test* const t) const {
for (int i=0;i<n;++i) {
std::string dot_cpp_appended = std::string(list[i]) + ".cpp";
if (!strcasecmp(t->m_details.testName, list[i]) ||
!strcasecmp(t->m_details.suiteName, list[i]) ||
!strcasecmp(t->m_details.filename, list[i]) ||
!strcasecmp(t->m_details.filename, dot_cpp_appended.c_str())) {
// erring on the side of matching more tests
return true;
}
}
return false;
}
};
int RunTheseTests(char ** list, int n) {
TestReporterStdout reporter;
TestRunner runner(reporter);
return runner.RunTestsIf(Test::GetTestList(), NULL, ListFilter(list,n), 0);
}
}
int main(int argc, char *argv[]) {
if (argc == 1) {
UnitTest::RunAllTests();
} else {
UnitTest::RunTheseTests(argv+1, argc-1); // skip the program's name itself.
}
}
唯一让我有点困扰的是,没有干净的方法来检查任何给定的测试匹配器是否最终没有匹配任何东西。
相关文章:
- 将宏与C++和UnitTest++一起使用
- 如何为 UnitTest++ 项目编写 CMakeLists.txt 文件
- 在Google UnitTest中检测glog输出
- 是否可以在main中以类似于Boost.MinimalTestFacility的方式调用Boost.UnitTest测试
- 为什么VS UnitTest框架中的Assert::AreEqual不能与std::string一起使用?
- 无法使用 UnitTest++ VS2012 运行生成后
- 如何在 Windows CE 环境中使用 UnitTest++
- 如何在流运算符重载函数中使用cust或指针
- 如何在Windows上使用命令行运行UnitTest++
- Volatile关键字允许访问UnitTest++中的常量结构
- unittest++不识别测试
- 开始代码::块和unittest++
- UnitTest++ and main
- unittest++问题:试图使用一个有状态的谓词
- customizing unittest++
- UnitTest++命令行参数
- Valgrind 在 unittest-cpp 库中显示内存泄漏
- 开始使用 UnitTest++