2014-02-14 188 views
0

我在讀關於TDD的內容,想知道是否可以編寫任何模擬對象而不使用像easyMock這樣的額外測試庫。模擬對象C++

比如我有代碼:

class Person 
{ 
    int age; 
    int add (int x) { return this.age + x } 
} 

如何編寫模擬對象來測試上面的代碼?

+0

你想在這裏嘲笑什麼?我認爲測試在這種情況下是直截了當的,並且根本不需要嘲弄 – Pradheep

回答

1

你不用像mock那樣測試類。您測試接口。事實上,你的代碼看起來像是一個模擬對象來測試其他代碼。

// defined in code that is being tested 
class Person { 
    virtual int add(int) = 0; 
} 
void foo(const Person& bar) { 
    // use person somehow 
} 

要測試上述接口,您可以創建一個模擬對象。這個對象沒有真正的實現可能具有的要求。例如,當真正的實現可能需要數據庫連接時,模擬對象不會。

class Mock: public Person { 
    int add(int x) { 
     // do something less complex than real implementation would 
     return x; 
    } 
} 

Mock test; 
foo(test); 

如果您想測試一個模板函數,則不需要使用繼承。

template<class T> 
void foo(T bar) { 
    // Code that uses T.add() 
} 

爲了測試這樣的界面,你可以定義模擬對象這樣

class Mock { 
    int add(int x) { 
     // do something less complex than real implementation would 
     return x; 
    } 
} 
+0

這就是我需要理解的。謝謝。 – Radek

0

當您在代碼中使用外部資源時(例如數據庫,文件等),Mocking非常有用。要做到這一點,你需要以這樣的方式實現這些接口,以便「僞裝」所需的步驟,以便可以測試實際測試的代碼(業務邏輯),而不必擔心由於外部資源中的情況。

您發佈的代碼不需要模擬來測試它。

+0

謝謝。你知道任何簡單的C++模擬對象的例子嗎? – Radek

+0

我的意思是看看它如何使用簡單的模擬類 – Radek

+0

如果你有一個需要數據庫連接的類,例如,你可以模擬該數據庫連接來返回測試中使用的受控數據。模擬將是你的硬編碼實現。與腳本或託管語言不同,C++不具備部分模擬功能(這只是模擬您在給定測試中使用的功能);您必須爲類/接口中的每個函數提供基本實現。 –