如何用gmock(Google Mock)来模拟一个模板类?

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

我有一个模板类,如下图所示,在测试另一个名为OrderBook_t的类时,出现了QtBuffer_t<DailyQuote_t>和QtBuffer_t&gt的实例。

struct DailyQuote_t;
struct TickQuote_t;

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

当测试另一个名为OrderBook_t的类时,QtBuffer_t<DailyQuote_t>和QtBuffer_t<TickQuote_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 ) );
};

我的问题是。有没有一种方法可以用单个mock来模拟一个类模板?

谢谢!我有一个类模板,如下图所示

c++ unit-testing templates mocking gmock
1个回答
0
投票

那么通过查看cook_book https:/github.comgooglegoogletestblobmastergooglemockdocscook_book.md。 事实上,你可以做到这一点。也许你可以检查一下你是否使用了最新的版本。


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?

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