简单的cpp单元测试

参考:http://www.cppblog.com/vczh/archive/2010/06/27/118829.html

一个really simple的测试“框架”?主要利用全局变量初始化在main函数之前的特性。

// vczh_test.h
 
#pragma once
 
#define TEST_CASE(name)                                                 \
    extern void TEST_CASE_##name();                                     \
    namespace vczh_unit_test_executors {                                \
    class TEST_CASE_RUNNER_##name {                                     \
    public:                                                             \
        TEST_CASE_RUNNER_##name() {                                     \
            try {                                                       \
                TEST_CASE_##name();                                     \
            } catch (const char* err) {                                 \
                fprintf(stderr, "%s:%d %s\n", __FILE__, __LINE__, err); \
            }                                                           \
        }                                                               \
    } TEST_CASE_RUNNER_##name##_INST;                                   \
    }                                                                   \
    void TEST_CASE_##name()
 
#define TEST_ASSERT(e) do { if (!(e)) throw "TEST_ASSERT failed: " #e; } while(0)
// vczh_test.cpp
 
#include "vczh_test.h"
#include <iostream>
 
int main() { return 0; }
 
TEST_CASE(foo) {
    std::cout << "running test ...\n";
    TEST_ASSERT(1==2);
    std::cout << "running end ...\n";
}

测试:

$ ./a.out
running test ...
vczh_test.cpp:6 TEST_ASSERT failed: 1==2

可以看到assert失败之后的代码没有执行。