3

後で 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 です

4

2 に答える 2