【问题标题】:Google mock of non virtual functions in class谷歌模拟类中的非虚函数
【发布时间】:2017-08-11 06:02:05
【问题描述】:

我已经测试了 Google Mock 的 virtual 功能,但我无法为 non-virtual 做到这一点。 “hi-perf 依赖注入”的概念我没看懂。

下面是具有一个non-virtual 函数的类。我想用 Google Mock 来测试这个功能。为简单起见,我删除了核心部分,只保留了单个 return 语句。

下面是例子:

// gtest and gmock files are added

class DetectorGPIO
{
    DetectorGPIO(void);
    virtual ~DetectorGPIO() {}
    StartPulseHigh();
};

BOOL DetectorGPIO::StartPulseHigh()
{
    return 1;
}

class MockDetectorGPIO : public DetectorGPIO
{
public:
    MOCK_METHOD0(StartPulseHigh,BOOL(void));
};

我错过了什么概念吗?

我是 Google Mock 的新手。任何帮助将不胜感激。

【问题讨论】:

  • 据我了解,它只模拟虚拟多态对象,这一直限制了它对我的用处。
  • 到底是什么问题?编译有问题吗?如果是这样,编译器的输出是什么?我自己对 Google Mock 并不熟悉,但查看您的源代码:您使用的是 StartPulseHigh,但它似乎没有在您的 DetectorGPIO 类中定义。
  • @Freakyy,其实我忘了在课堂上添加定义。我现在已经添加了。

标签: c++ unit-testing googlemock


【解决方案1】:

您可以在Google Mock Cookbook 中阅读有关高性能依赖注入的信息。我认为它清楚地描述了使用这个概念的正确方法。

在这种类型的模拟中,您的 MockDetectorGPIO 不需要继承自 DetectorGPIO。在您想使用具体类(或模拟)的地方,您应该使用模板:

template <class Detector>
void ConfigureDetectorGPIO(Detector* pDetector)
{
    pDetector->StartPulseHigh();
}

请注意,在 Google Mock 中,您没有义务模拟现有方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2013-11-03
    相关资源
    最近更新 更多