如何使用 gmock(Google Mock) 模拟模板 class?
How to mock a template class with gmock(Google Mock)?
我有一个 class 模板如下:
struct DailyQuote_t;
struct TickQuote_t;
template <typename Q>
class QtBuffer_t {
public:
virtual int size() const noexcept = 0;
};
测试另一个名为 OrderBook_t 的 class 时,实例 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 ) );
};
终于要分别mock他们了
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 ) );
};
我的问题:有没有办法用单个模拟来模拟 class 模板?
谢谢!
好吧,通过查看 cook_book https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md,您实际上可以做到。检查您是否使用最新版本可能会很有趣。
运行 你在示例测试中逐字记录的代码对我有用:
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 月),已超过 latest release。作为 afkid,我想知道您是否使用了足够新的 gmock
版本?
我有一个 class 模板如下:
struct DailyQuote_t;
struct TickQuote_t;
template <typename Q>
class QtBuffer_t {
public:
virtual int size() const noexcept = 0;
};
测试另一个名为 OrderBook_t 的 class 时,实例 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 ) );
};
终于要分别mock他们了
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 ) );
};
我的问题:有没有办法用单个模拟来模拟 class 模板?
谢谢!
好吧,通过查看 cook_book https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md,您实际上可以做到。检查您是否使用最新版本可能会很有趣。
运行 你在示例测试中逐字记录的代码对我有用:
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 月),已超过 latest release。作为 afkid,我想知道您是否使用了足够新的 gmock
版本?