Я создал инфраструктуру модульного теста для c ++, которую я хочу портировать на C позже, и я столкнулся с проблемой, когда модульное тестирование просто не запускается.Модульные тесты создаются в файлах .cpp, и только один файл .cpp должен запускать все тесты.
Чтобы упростить задачу, обычно создается тест:
main.cpp
#define UNIT_TEST_IMPL // or whatever
#include "unit_test.hpp"
int main()
{
for(const auto& test : tests_queue)
test->run();
return 0;
}
unit_test.hpp
#pragma once
struct Base
{
protected:
Base() = delete;
Base(Base* ptr);
public:
virtual void run() = 0;
};
#if defined(UNIT_TEST_IMPL)
#include <vector>
std::vector<Base*> tests_queue;
Base::Base(Base* ptr)
{
tests_queue.push_back(ptr);
}
#endif
test.cpp
#include "unit_test.hpp"
#include <iostream>
struct Test : Base
{
Test()
: Base(this)
{}
void run() override
{
std::cout << "new test" << std::endl;
}
};
struct Test2 : Base
{
Test2()
: Base(this)
{}
void run() override
{
std::cout << "new test2" << std::endl;
}
};
static Test test;
static Test2 test2;
Вопрос: почему не выполняются тесты, определенные в test.cpp (еслиЯ создаю тесты в файле main.cpp, они отлично работают)?Я предполагаю, что проблема заключается в том, как я храню указатели базы, но я не знаю.Компилятор g ++ 6.4.0