gmock:如何将模拟 class 的指针传递给另一个 class?
gmock: How do I pass a pointer of a mock class into another class?
我必须使用 gmock 测试以下 classes 并且由于我对 Gmock 测试总体来说还很陌生,所以我不知道这些错误是从哪里来的。所以我的模型 class 在 Model.hpp 中,看起来像这样:
class Model {
public:
Model(double delta_t) : Delta_t(delta_t){};
void add_submodel(std::unique_ptr< Submodel > submodel_ptr); //function adds submodels to private vector below
private:
std::vector<std::unique_ptr< Submodel>> submodel;
protected:
const double Delta_t;
};
上面的class模型使用了class子模型,其定义如下:
class Submodel {
public:
virtual ~ Submodel() {};
virtual unsigned int get_number_of_states() = 0;
}
我也为Submodel定义了对应的Mock Class:
class MockSubmodel : public Submodel {
public:
MOCK_METHOD(unsigned int, get_number_of_states,(),(override));
};
到目前为止一切顺利。现在,我想测试函数 model.add_subproblem(std::unique_ptr submodel_ptr) 是否真的将子模型添加到模型中。因此,我开始定义以下测试:
TEST(modelTest, Add_Submodel) {
Model::Model model(1);
auto mock1_ptr = std::make_unique<Model::MockSubmodel>();
model.add_subproblem(mock1_ptr);
}
我得到的错误是:
error: no viable conversion from 'unique_ptr<Model::MockSubmodel>' to 'unique_ptr<Model::Submodel>'
所以我的问题是:将 MockSubmodel 作为指针传递给 add_submodel() 以便它可以被识别为子模型的正确方法是什么?由于 gmock 结构,我认为这会自动发生?
add_submodel
函数采用其 std::unique_ptr<Submodel>
参数 值 。当您调用 model.add_subproblem(mock1_ptr);
时,这将导致 mock1_ptr
被复制。但是,unique_ptr不可复制。
要解决此问题,您可以删除变量并直接传递临时变量,如 model.add_subproblem(std::make_unique<Model::MockSubmodel>());
中所示。或者,您可以 移动 中的 unique_ptr ,如 model.add_subproblem(std::move(mock1_ptr));
(但您必须记住,在此之后 mock1_ptr 将变为 nullptr
点)。
我必须使用 gmock 测试以下 classes 并且由于我对 Gmock 测试总体来说还很陌生,所以我不知道这些错误是从哪里来的。所以我的模型 class 在 Model.hpp 中,看起来像这样:
class Model {
public:
Model(double delta_t) : Delta_t(delta_t){};
void add_submodel(std::unique_ptr< Submodel > submodel_ptr); //function adds submodels to private vector below
private:
std::vector<std::unique_ptr< Submodel>> submodel;
protected:
const double Delta_t;
};
上面的class模型使用了class子模型,其定义如下:
class Submodel {
public:
virtual ~ Submodel() {};
virtual unsigned int get_number_of_states() = 0;
}
我也为Submodel定义了对应的Mock Class:
class MockSubmodel : public Submodel {
public:
MOCK_METHOD(unsigned int, get_number_of_states,(),(override));
};
到目前为止一切顺利。现在,我想测试函数 model.add_subproblem(std::unique_ptr submodel_ptr) 是否真的将子模型添加到模型中。因此,我开始定义以下测试:
TEST(modelTest, Add_Submodel) {
Model::Model model(1);
auto mock1_ptr = std::make_unique<Model::MockSubmodel>();
model.add_subproblem(mock1_ptr);
}
我得到的错误是:
error: no viable conversion from 'unique_ptr<Model::MockSubmodel>' to 'unique_ptr<Model::Submodel>'
所以我的问题是:将 MockSubmodel 作为指针传递给 add_submodel() 以便它可以被识别为子模型的正确方法是什么?由于 gmock 结构,我认为这会自动发生?
add_submodel
函数采用其 std::unique_ptr<Submodel>
参数 值 。当您调用 model.add_subproblem(mock1_ptr);
时,这将导致 mock1_ptr
被复制。但是,unique_ptr不可复制。
要解决此问题,您可以删除变量并直接传递临时变量,如 model.add_subproblem(std::make_unique<Model::MockSubmodel>());
中所示。或者,您可以 移动 中的 unique_ptr ,如 model.add_subproblem(std::move(mock1_ptr));
(但您必须记住,在此之后 mock1_ptr 将变为 nullptr
点)。