Чрезвычайно простая тестовая библиотека - PullRequest
1 голос
/ 01 апреля 2012

Существует ли легко встраиваемая библиотека C ++ test с дружественной лицензией?Я хотел бы один заголовочный файл.Нет .cpp файлов, нет пяти петабайт включений.Таким образом, CppUnit и Boost.Test отсутствуют.

По сути, все, что мне нужно - это сбросить один файл в дерево проекта, включить его и иметь возможность писать

 testEqual(a,b)

и посмотреть, не получится ли это.Я бы использовал assert, но он не работает в режиме без отладки и не может печатать значения a и b, а перед перезаписью assert я бы предпочел поискать в существующей библиотеке.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012

Я испытываю желание сказать «напиши свое», что я и сделал. С другой стороны, вы можете использовать то, что я написал: 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
2 голосов
/ 01 апреля 2012

Попробуйте google-test https://github.com/google/googletest/

Это действительно легкий, кроссплатформенный и простой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...