我正在使用Gmock進行測試。我有一個類,其中所有的方法都是靜態的。 例如靜態方法的Gmock
class A
{
static int Method1(int x,int y){return (x+y)};
};
如何使用Gmock測試此類。 請幫我一把。 謝謝
我正在使用Gmock進行測試。我有一個類,其中所有的方法都是靜態的。 例如靜態方法的Gmock
class A
{
static int Method1(int x,int y){return (x+y)};
};
如何使用Gmock測試此類。 請幫我一把。 謝謝
你不能不修改你的代碼。但是你可以將你的應用程序與存根對象連接起來。只需創建另一個「A類」實現並將其與您的測試應用程序鏈接起來。
您可以通過創建獨立模擬類來實現這一點,該模擬類將不會從您需要模擬的類派生。以下是你將如何做到這一點。
步驟 - 1:評論的具有類的靜態功能
// Comment the class
/*
class A
{
static int Method1(int x,int y){return (x+y)};
};
*/
步驟 - 2:創建具有相同名稱爲A
一個模擬類和模擬在它的Method1
。請注意,它不是從原來的類派生
class A {
public:
MOCK_METHOD2(Method1, int(int x, int y));
};
讓我們假設這是使用需要被嘲笑它UsingA
靜態函數的類。這是如何寫出來的。
class UsingA {
A &a1;
public:
UsingA(A & _a1) : a1(_a1) {}
int CallFn() {
// Original function that needs to be commented
// return a1::Method1(10,25);
return a1.Method1(10, 20);
}
};
那麼這裏就是你怎麼會寫測試
TEST(MyMockTest, Method1Test) {
A mstat;
UsingA ua(mstat);
EXPECT_CALL(mstat, Method1(_,_))
.Times(1)
.WillOnce(Return(100));
int retVal = ua.CallFn();
EXPECT_EQ(retVal,100);
}
可能不是最好的方式,但服務器旨意。希望它有幫助
我想你問如何嘲笑方法嗎?不測試這個類,因爲在你的例子中這將是微不足道的 – Martin
就像這樣。 B類 { 空隙XYZ {A ::方法1(X,Y)} } 這是case.How我是否GTEST類B. 我知道我必須模擬類A.But而不進行任何源代碼中的更改。如何測試B? – Viky
如果不進行修改,則在測試B類時不能模擬Method1。給定您的示例時,要給出具體的建議有點困難,因爲對Method1的調用是毫無意義的。如果您只想驗證調用是否正確完成,可以在B的構造函數中注入靜態方法,並在測試時傳遞一個模擬函數。 – Martin