如何使用 gmock (Google Mock) 模拟模板类?

问题描述 投票:0回答:2

我有一个类模板如下:

struct DailyQuote_t;
struct TickQuote_t;

template <typename Q>
class QtBuffer_t {
public:
   virtual int size() const noexcept = 0;
};

测试另一个名为 OrderBook_t 的类时,实例 QtBuffer_t 和 QtBuffer_t 都是必需的。

class OrderBook_t {
public:
   void setDependent( const QtBuffer_t<DailyQuote_t>* pDB, const QtBuffer_t<TickQuote_t>* pTB ) noexcept {
      m_pDBuf = pDB;
      m_pTBuf = pTB;
   };

   bool update() {
      m_pDBuf->size();
      m_pTBuf->size();
   };

private:
   const QtBuffer_t<DailyQuote_t>* m_pDBuf;
   const QtBuffer_t<TickQuote_t>*  m_pTBuf;
};

我尝试如下模拟模板,但失败了:

template<typename Q>
class QtBufferMock : public QtBuffer_t<Q> {
public:
   MOCK_METHOD( int, size, (), ( const, noexcept, override ) );
};

最后我得分别嘲笑他们:

class DailyBufferMock : public QtBuffer_t<DailyQuote_t> {
public:
   MOCK_METHOD( int, size, (), ( const, noexcept, override ) );
};

class TickBufferMock : public QtBuffer_t<TickQuote_t> {
public:
   MOCK_METHOD( int, size, (), ( const, noexcept, override ) );
};

有没有一种方法可以用单个模拟来模拟类模板?

c++ unit-testing templates mocking googlemock
2个回答
1
投票

在示例测试中逐字运行代码对我来说很有效:

template<typename Q>
class QtBufferMock : public QtBuffer_t<Q> {
public:
   MOCK_METHOD( int, size, (), ( const, noexcept, override ) );
};


TEST(T1, CreateMockObj){
    QtBufferMock<DailyQuote_t> m1;
    QtBufferMock<TickQuote_t> m2;
    OrderBook_t t;
    t.setDependent(&m1,&m2); 
    t.update();
}

提交 dcc92d0ab6c4ce022162a23566d44f673251eee4(2020 年 4 月),该版本已超过最新版本。作为 afkid,我想知道您是否正在使用足够新的版本

gmock


0
投票

好吧,通过查看cook_book https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md,你实际上可以做到。检查您是否使用的是最新版本可能会很有趣。

© www.soinside.com 2019 - 2024. All rights reserved.