gmock為什麼只能支援虛函式(其實也不準確)

2021-07-07 06:06:15 字數 538 閱讀 1606

舉報

|2015-03-24 14:54

andrewnwpu

|瀏覽 0 次

懸賞:50

函式 我有更好的答案

google mock按道理講只能mock虛函式,這是因為在單元測試中,首先定義乙個mock類(mocktest),public繼承要mock的函式(fun1())所在的類(test),在mocktest中呼叫巨集mock_methodn,該巨集應該是在mocktest中宣告乙個同名的虛函式(virtual fun1()),因為測試用例中有關fun1()的函式都是通過mocktest物件進行呼叫的,因此,所有涉及到fun1()的函式均是mocktest類中重新定義的那個。對於非虛函式,由於其可能在類中的其它函式fun2()中被呼叫,假設mocktest並沒有重新定義fun2(),雖然使用了mocktest類物件去呼叫fun2(),但是fun2()是從test中繼承的,fun2()中呼叫的fun1()必然是test中的原始函式,並不是mock之後的fun1(),所以我覺得這就是google mock 無法mock非虛函式的原因。

為什麼建構函式不能為虛函式

1,從儲存空間角度 虛函式對應乙個vtable,這大家都知道,可是這個vtable其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,無法找到vtable,所以建構函式不能是虛函式。2,從使用角度 虛函式主要用...

建構函式為什麼不能是虛函式

1.從儲存空間角度,虛函式對應乙個指向vtable虛函式表的指標,這大家都知道,可是這個指向vtable的指標其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,怎麼找vtable呢?所以建構函式不能是虛函式。...

為什麼建構函式不能為虛函式

1,從儲存空間角度 虛函式對應乙個vtable,這大家都知道,可是這個vtable其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtable來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,無法找到vtable,所以建構函式不能是虛函式。2,從使用角度 虛函式主要用...