2012-02-11 80 views
0

我有一塊C++代碼,其單元測試即將完成。例如在C++中創建存根功能

//totest.h 
#include "lowerlayer.h" 
class ToTest 
{ 
    LowerLayer *ll; 
public: 
    ToTest(); 
    void function_totest(); 
}; 

//totest.cpp 
#include "totest.h" 
ToTest::ToTest() 
{ 
    ll = new LowerLayer(); 
} 
void ToTest::function_totest() 
{ 
    ll->function_lowerlayer(); 
} 

//lowerlayer.h 
class LowerLayer 
{ 
public: 
    LowerLayer(); 
    void function_lowerlayer(); 
}; 

//lowerlayer.cpp 
#include "lowerlayer.h" 
LowerLayer::LowerLayer() 
{ 
    //do nothing 
} 
void LowerLayer::function_lowerlayer() 
{ 
    //do nothing 
} 

這四個文件即: totest.h,totest.cpp,lowerlayer.h和lowerlayer.cpp是產品代碼文件不應該被修改爲單元測試。

我有一個測試程序,其代碼如下

//testcode.cpp 
#include "totest.h" 
int main() 
{ 
    ToTest *tt = new ToTest(); 
    tt->function_totest(); 
    //some asserts 
    return 0; 
} 

現在,我必須創建類的低層和其功能的存根功能。 當從函數function_totest調用函數function_lowerlayer時,應使用來自testcode應用程序的控制標誌來調用存根函數和實函數(一次一個)。

請提供一些建議來設計此要求。 謝謝, Ankur

+0

存根「功能」是什麼?存根是一個尚未完成的方法的佔位符,它通常包含有關如何實現該方法的註釋,並且包含一個虛擬返回值,以便源文件將被編譯。 – 2012-02-11 07:18:31

+0

@HunterMcMillen - 這不太正確;存根在測試環境中具有特定的含義。 [這是一篇不錯的文章](http://martinfowler.com/articles/mocksArentStubs.html)從測試的角度解釋'stubs'和'mocks'。 – dbn 2012-12-20 23:02:25

+0

這可能是[尋找代碼存根生成器(從頭文件)](http://stackoverflow.com/q/2020568/1309332)的副本。 – dbn 2012-12-20 23:04:29

回答

1

嘗試在您的測試中使用GoogleMock。 http://code.google.com/p/googlemock/

通過JMock的,EasyMock的,和Hamcrest啓發,並設計時考慮了C++的 細節,谷歌C++模擬框架(或谷歌模擬爲 簡稱)是用於編寫和使用C++模擬一個類庫。谷歌 模擬:

,您可以創建平凡使用簡單的宏mock類,支持 豐富的匹配和行動,處理無序,部分 有序的,或完全有序的期望,是用戶可擴展的, 和在Linux上工作,Mac OS X,Windows,Windows Mobile,minGW和 Symbian。

+0

我嘗試過使用Mockpp框架,並投入了一些時間。但它沒有幫助我。我不確定GoogleMock。除了使用框架,還有其他的解決方案嗎? – user982740 2012-02-12 00:21:04

+0

好吧,你可以編寫自己的模擬器,但使用框架要容易得多。 – 2012-02-12 16:42:27

+0

出於某種原因,我認爲Google Mock只能用於虛擬課堂或模板課程。這不正確嗎? – dbn 2012-12-20 02:48:34