2011-12-03 103 views
4

我們遇到了以下問題:一些我們無法觸及但需要單元測試的類不幸的是,這些類沒有設計考慮單元測試,所以我們在創建模擬對象來測試代碼時遇到了問題。模擬對象的困境

實施例:

class SomeOtherClass 
{ 
public: 
void foo2() { … } 
}; 

class ClassToTest 
{ 
public: 
ClassToTest() {…} 
void foo1() { SomeOtherClass A.foo2(); } 
}; 

在上面的例子中,我們想測試foo1()但它需要foo2()所以我們想使foo2()屬於模擬對象(在現實生活中這些功能/類得多複雜並涉及與硬件配置的交互等,因此需要模擬對象/功能)。

到現在爲止,我們已經做了這樣的事情,但它並不是最優的,因爲代碼似乎對其他單元測試有副作用。

class MockSomeOtherClass 
{ 
public: 
    foo2() { … } // mock function 
}; 

#define SomeOtherClass MockSomeOtherClass 

#include 「ClassToTest.cpp」 
... 

有沒有更好的辦法做到這一點不改變原來的類(或最小的變化)?我們使用CPPUnit進行測試。

編輯:添加標籤winapi更清楚地描述環境。

回答

2

有一種叫做Typemock Isolator++的產品,可以解決您提出的問題。我還沒有嘗試過,所以無法評論它的工作原理或使用方法。

不幸的是,你必須給他們你的電子郵件地址來嘗試它。下載過程非常簡單,但是您可以重定向到this page,它會引導您「現在註冊您的軟件以獲得免費試用版!請輸入您的詳細信息,包括有效的電子郵件以便接收啓動密鑰以開始使用Isolator ++。

+1

謝謝,我會看看! –