C++ 当GoogleTestFixture没有默认构造函数时,如何在其中定义变量?

C++ 当GoogleTestFixture没有默认构造函数时,如何在其中定义变量?,c++,googletest,C++,Googletest,我有以下几点 #include <semsim/Subject.h> #include <semsim/Triple.h> #include "gtest/gtest.h" class TripleTests : public ::testing::Test { public: std::string subject_str; semsim::Subject subject; void SetUp() override {

我有以下几点


#include <semsim/Subject.h>
#include <semsim/Triple.h>
#include "gtest/gtest.h"

class TripleTests : public ::testing::Test {
public:

    std::string subject_str;
    semsim::Subject subject;

    void SetUp() override {
        subject_str = "./MyModel#metaid_0";
        subject = semsim::Subject(subject_str);
    }
};

TEST_F(TripleTests, TestSubjectMetaId) { // this line causes the error
    std::cout << subject << std::endl;
}

因此,我的问题是:在不需要定义默认构造函数的情况下,如何在
TripleTest
类中创建subject对象,以便在
TEST\F
函数中使用它?或者有必要在
Suject
中设置默认构造函数,以便在测试夹具中创建一个构造函数吗

作为参考,
主题
标题如下所示:

    class Subject {
    private:
        std::string metaId;

    public:

        explicit Subject(std::string metaId) : metaId(std::move(metaId)) {};

        const std::string &getMetaId() const;

        bool operator==(const Subject &rhs) const;

        bool operator!=(const Subject &rhs) const;

        friend std::ostream &operator<<(std::ostream &os, const Subject &subject);
    };

}
导致

Constructor for 'TripleTests' must explicitly initialize the member 'subject' which does not have a default constructor. Isn't the line `this->subject = s` initialising the member `subject`? 

您必须使用fixture的构造函数而不是
SetUp()
来初始化初始化器列表中的成员:

class TripleTests : public ::testing::Test {
public:

    std::string subject_str;
    semsim::Subject subject;

    TripleTests() 
        : subject_str("./MyModel#metaid_0")
        , subject(subject_str)
    {
    }
};
Constructor for 'TripleTests' must explicitly initialize the member 'subject' which does not have a default constructor. Isn't the line `this->subject = s` initialising the member `subject`? 
class TripleTests : public ::testing::Test {
public:

    std::string subject_str;
    semsim::Subject subject;

    TripleTests() 
        : subject_str("./MyModel#metaid_0")
        , subject(subject_str)
    {
    }
};