簡體   English   中英

使用 googlemock 模擬正在測試的函數的內部調用

[英]Mocking internal calls of a function being tested using googlemock

我是 Google Mock 的新手,根據我對文檔和在線資源的理解,我無法確定我的問題的解決方案:

我有以下課程:

class A
{
    public:
        A() { }
        int fun1()
        {
            //Some code
            B b;
            x = b.fun2();
            //Some other code
        }
};
class B
{
    public:
        B() { }
        int fun2()
        {
            //Some code
            y = C::fun3();
            //Some code
        }
};
class C
{
    public:
        static int fun3()
        {
            //Read a file and provide success if a certain pattern is found
        }
};

現在我正在嘗試為 A::fun1() 編寫一個 Google 測試。 但是由於代碼的結構(所有調用都是通過對象進行的,並且我沒有可以用來初始化模擬等的基類,因此我無法成功模擬。

有人可以幫助我了解這是否可以用當前形式的 Google Mock 進行模擬? 請注意,我不允許更改原始源代碼。

只要可以使用靜態接口(即模板參數)配置被測類,您就可以這樣做。 有關更多信息,請參見此處: 模擬非虛擬方法

另一種選擇可能是在您的測試類中引入包裝器接口,可以像往常一樣模擬替代模擬具體類

如果您無法更改任何代碼,恕我直言,這是不可能的。

更新:只要class BA::fun1()內實例化,無論如何都很難模擬B 它應該作為參數傳遞,因此您有機會控制測試方法中的實例化。

對您來說可能是一個可行的解決方案,可以欺騙構建環境進行測試,並為提供模擬的class B提供聲明和定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM