非常简单的测试库

时间:2012-04-01 12:07:34

标签: c++ testing

是否可以使用友好许可证轻松嵌入C ++测试库?我想要一个头文件。没有.cpp个文件,没有五PB的包含。所以CppUnit和Boost.Test都出局了。

基本上我只想将单个文件放到项目树中,包含它并能够编写

 testEqual(a,b)

看看它是否失败。我使用的是assert,但它无法在非调试模式下工作,无法打印ab的值,并且在重写assert之前而宁愿搜索现有的图书馆。

2 个答案:

答案 0 :(得分:2)

尝试使用google-test https://github.com/google/googletest/

它非常轻巧,跨平台,简单。

答案 1 :(得分:2)

我很想说“写你自己的”,这就是我所做的。另一方面,您可能希望重用我写的内容:test_util.hpptest_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