我想在谷歌測驗中模擬 myFunction 并且這兩個模板有問題。
template <class Outer>
class MyClass{
template <class T>
void myFunction(const int a, T * b);
};
uj5u.com熱心網友回復:
首先,Outer模板型別在這里不是問題,因為它不用于myFunction簽名。
要處理型別T,您需要為測驗期間使用的所有型別完全專門化模擬方法。
想象一下,您想使用以下方法測驗該方法T=std::string:
template <class Outer>
class MyClassMock {
public:
MOCK_METHOD(void, myFunction, (const int, std::string*));
template <class T>
void myFunction(const int a, T* b);
template <>
void myFunction(const int a, std::string* b)
{
myFunction(a, b);
}
};
如果您測驗的函式將具有如下簽名:
template <typename TMyClass>
void UseMyClassWithString(TMyClass& i_value)
{
std::string t;
i_value.myFunction(5, &t);
}
結果測驗可能如下所示:
TEST(UseMyClass, ShouldCallMyFunction)
{
MyClassMock<size_t> mock;
EXPECT_CALL(mock, myFunction).Times(1);
UseMyClassWithString(mock);
}
這是您的Outer型別size_t,它僅用于創建模擬物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/415748.html
標籤:
下一篇:獲取指向將被呼叫的多載函式的指標
