是否可以使用友好许可证轻松嵌入C ++测试库?我想要一个头文件。没有.cpp
个文件,没有五PB的包含。所以CppUnit和Boost.Test
都出局了。
基本上我只想将单个文件放到项目树中,包含它并能够编写
testEqual(a,b)
看看它是否失败。我使用的是assert
,但它无法在非调试模式下工作,无法打印a
和b
的值,并且在重写assert
之前而宁愿搜索现有的图书馆。
答案 0 :(得分:2)
尝试使用google-test https://github.com/google/googletest/
它非常轻巧,跨平台,简单。答案 1 :(得分:2)
我很想说“写你自己的”,这就是我所做的。另一方面,您可能希望重用我写的内容:test_util.hpp和test_util.cpp。可以直接将cpp文件中的一个定义内联到hpp文件中。 MIT lisence。我也将它粘贴到下面的答案中。
这使您可以编写如下测试文件:
#include "test_util.hpp"
bool test_one() {
bool ok = true;
CHECK_EQUAL(1, 1);
return ok;
}
int main() {
bool ok = true;
ok &= test_one();
// Alternatively, if you want better error reporting:
ok &= EXEC(test_one);
// ...
return ok ? 0 : 1;
}
浏览tests目录以获取更多灵感。
// By Magnus Hoff, from http://stackoverflow.com/a/9964394
#ifndef TEST_UTIL_HPP
#define TEST_UTIL_HPP
#include <iostream>
// The error messages are formatted like GCC's error messages, to allow an IDE
// to pick them up as error messages.
#define REPORT(msg) \
std::cerr << __FILE__ << ':' << __LINE__ << ": error: " msg << std::endl;
#define CHECK_EQUAL(a, b) \
if ((a) != (b)) { \
REPORT( \
"Failed test: " #a " == " #b " " \
"(" << (a) << " != " << (b) << ')' \
) \
ok = false; \
}
static bool execute(bool(*f)(), const char* f_name) {
bool result = f();
if (!result) {
std::cerr << "Test failed: " << f_name << std::endl;
}
return result;
}
#define EXEC(f) execute(f, #f)
#endif // TEST_UTIL_HPP