假設我有一個C++類,像這樣:C++和依賴注入單元測試
class A
{
public:
A()
{
}
void SetNewB(const B& _b) { m_B = _b; }
private:
B m_B;
}
爲了單元測試這樣的事情,我將不得不打破B. A的依賴。由於A類持有到一個實際的對象而不是一個指針,我將不得不重構這段代碼來獲取一個指針。此外,我需要爲B創建一個父接口類,以便在測試SetNewB時可以傳入我自己的B的假。
在這種情況下,不使用依賴注入進行單元測試會使現有代碼進一步複雜化?如果我讓B成爲一個指針,我現在介紹堆分配,現在有一段代碼負責清理它(除非我使用ref計數指針)。另外,如果B是一個相當平凡的類,只有一些成員變量和函數,爲什麼要爲它引入一個全新的接口,而不是僅僅使用B的實例進行測試?
我想你可能會認爲使用接口重構A更容易。但是有些情況下可能需要緊密耦合兩個類?
有趣的是,我想我是在想象單元測試需要所有類彼此完全分離。但正如你所指出的,A絕對需要B來工作;所以他們實際上是一個單位。 – lhumongous 2010-04-09 18:22:54