我已经为 c++ 创建了一个单元测试框架,我想稍后将其移植到 C 中,但我遇到了一个单元测试根本无法运行的问题。单元测试在 .cpp 文件中创建,并且只有一个 .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
测试.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