gpt4 book ai didi

c++ - 为什么我的 Hippomock 期望在使用多重继承时失败

转载 作者:行者123 更新时间:2023-11-30 04:43:31 24 4
gpt4 key购买 nike

我正在使用 Hippomocks 并且有一个实现通用接口(interface)的类。当我对此类寄予期望时,我没有得到预期的行为。

这是我的最小“工作”示例

template <class T>
struct Foo {
virtual ~Foo() = default;
virtual void bar(const T& t) = 0;
};

struct Baz : public Foo<int>, public Foo<double> {
void bar(const int& t) override = 0;
void bar(const double& t) override = 0;
};

TEST_CASE("Foo")
{
MockRepository mocks;

auto baz = mocks.Mock<Baz>();

mocks.ExpectCall(baz, Foo<int>::bar);
baz->bar(12);

mocks.ExpectCall(baz, Foo<double>::bar);
baz->bar(234.3);
}

我希望这次测试能顺利通过。然而,测试失败并显示以下消息(略微编辑以删除项目名称):

test_foo.cpp|28| FAILED:
|| due to unexpected exception with message:
|| Function called without expectation!
|| Expectations set:
|| test_foo.cpp(31)
|| : Expectation for Foo<int>::bar(...) on the mock at 0x0x5569df8f3400 was
|| satisfied.
|| test_foo.cpp(34)
|| : Expectation for Foo<double>::bar(...) on the mock at 0x0x5569df8f3400 was
|| not satisfied.
I am expecting the bar() belonging to Foo<double> to be invoked.

最佳答案

我很好奇如何在不手动定义所有方法的情况下实现 Mock(就像其他模拟库一样),但事实证明它不起作用。 Mock 实现采用未定义行为,因为它只是 reinterpret_cast unrelated class to Baz :

template <typename base>
base *MockRepository::Mock() {
mock<base> *m = new mock<base>(this);
mocks.push_back(m);
return reinterpret_cast<base *>(m);
}

它会做各种其他俗气的事情,比如弄乱 vtable。这些东西都不能可靠地工作。

关于c++ - 为什么我的 Hippomock 期望在使用多重继承时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58233562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com