如何解决使用 registerConstructor 注入 Mock
我已经成功地使用 .replace(get*Component).with(getMock*Component)
设置了一个 Mock 以通过水果进行注射,如下所示:
#include <gmock/gmock.h>
#include "mockBar.h"
#include "classUnderTest.h"
namespace foo {
fruit::Component<ClassUnderTest,MockBar> getMainComponent()
{
return fruit::createComponent()
.replace(getBarComponent)
.with(getMockBarComponent)
.install(getClassUnderTestComponent);
}
class ClassUnderTestTest : public ::Testing::Test
{
protected:
fruit::Injector<ClassUnderTest,MockBar> injector{getMainComponent};
MockBar *mockBar{injector};
ClassUnderTest *classUnderTest{injector};
};
// TEST_F declarations
}
对于我自己写的基本模拟,我没有问题,因为我可以在默认构造函数上使用 INJECT()
宏并将模拟绑定到 getMock*Component
中的接口,如下所示:
#include "bar.h"
namespace foo
{
class MockBar : public Bar
{
public:
INJECT(MockBar()) = default;
// MOCK_METHOD declarations
};
fruit::Component<Bar> getMockBarComponent()
{
return fruit::createComponent()
.bind<Bar,MockBar>();
}
}
对于在 googlemock 库中定义了构造函数的 StrictMock
,据我所知,我应该使用 .registerConstructor<StrictMock<Mock*>()>()
而不是,这就是我的问题开始的地方。
未找到 T 的显式绑定或 C::Inject 定义。
为了进行故障排除,我删除了 INJECT()
宏并将此逻辑应用到基本模拟中,就像这样,在尝试构建时给了我同样的错误:
#include "bar.h"
namespace foo
{
class MockBar : public Bar
{
public:
// MOCK_METHOD declarations
};
fruit::Component<Bar> getMockBarComponent()
{
return fruit::createComponent()
.registerConstructor<MockBar()>()
.bind<Bar,MockBar>();
}
}
为了论证,像这样尝试使用 registerProvider()
但得到了同样的错误:
fruit::Component<Bar> getMockBarComponent()
{
return fruit::createComponent()
.registerProvider([](){ return new MockBar; })
.bind<Bar,MockBar>();
}
registerFactory<Mock*()>()
对于我想要做的事情来说似乎太过分了(我只需要一个实例),所以我没有尝试深入研究。
我的假设是因为我对 googlemock 和 Fruit 都不熟悉,而且因为我的 C++ 经验并不出色,所以无论我读到了什么相反的内容,我在这里都遗漏了一些细微差别。
对于我接下来应该尝试什么或我犯过的明显错误有什么想法/建议吗?
如果我没有在这里捕捉到所有重要的东西,我可以抽象出更多的代码。
提前Ta!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。