如何解决gmock:如何将模拟类的指针传递给另一个类?
我必须使用gmock测试以下类,并且由于我一般对Gmock Testing还是陌生的,所以我不知道从哪里得到这些错误。所以我在Model.hpp中有我的Model类,看起来像这样:
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;
};
上面的类Model使用的是Submodel类,其定义如下:
class Submodel {
public:
virtual ~ Submodel() {};
virtual unsigned int get_number_of_states() = 0;
}
我还为子模型定义了相应的Mock类:
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()中,以便可以将其识别为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>());
所示。或者,您可以像在model.add_subproblem(std::move(mock1_ptr));
中一样,移动到其中unique_ptr(但必须记住,此点之后,mock1_ptr将变成nullptr
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。