後で C に移植したい C++ 用の単体テスト フレームワークを作成しましたが、単体テストが実行されないという問題に遭遇しました。単体テストは .cpp ファイルで作成され、1 つの .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 ファイルでテストを作成すると、完全に正常に実行されます)。私の推測では、問題は Base ポインターを格納する方法にあると思いますが、わかりません。コンパイラは g++ 6.4.0 です