2011-11-01 74 views
3

我已經開始使用GTest(Google Test)來開發我正在開發的C++項目。我有一個類很大程度上依賴於MFC(CFile,CObject,CString等)。我該如何測試嚴重依賴於GTest的MFC方法

如何打破MFC的依賴關係(或最小化它們),所以我不必創建虛擬MFC對象來運行我的測試?我想測試我的方法不MFC功能。

這裏是一種方法的一個例子,我要測試:

// DumpContext class inherits from CDumpContext 
void MyClass::Print(DumpContext &dc) 
{ 

    // MyClass::Print real work goes here : 
    ... 

} 
+0

恐怕我沒有看到問題。如果您的類從MFC類下降,則無法從項目中刪除該依賴項。確保測試代碼而不是MFC的方法是在測試中編寫*代碼,以便測試代碼而不是MFC。 –

+0

我的類不從MFC下降,但使用MFC類的引用和局部變量。在給定的例子中,我必須在調用Print方法之前創建一個DumpContext。要創建CDumpContext(我的方法可以使用),我必須將CFile傳遞給CDumpContext構造函數。要創建一個CFile,我需要一個通過調用CreateFile函數等創建的句柄...我寧願只是將一個模擬DumpContext傳遞給我的方法,而不是使用MFC類創建一個「真正的」CDumpContext。現在它更有意義嗎?謝謝! –

回答

1

據我可以理解,那MFC缺乏接口的事實讓人難以嘲笑。 作爲一種替代方案,您可以從依賴關係繼承,並儘量發揮它的作用。 在你的例子中,你可以使用已經存在的CMemFile,它在構造時不需要任何東西,並且允許你訪問結果。

在其他情況下,您必須自己創造類似的東西。

class MyClass 
{ 
public: 
    void Print(CDumpContext &dc) { 
     dc.DumpAsHex(5592); 
     return; 
    } 
}; 

TEST(Demo_Test,MyClass) 
{ 
    CMemFile File; 
    CDumpContext DumpContext_Stubb(&File); 
    MyClass Class; 
    Class.Print(DumpContext_Stubb); 
    EXPECT_GT(File.GetLength() ,0); // Do some test on the result 
} 
相關問題