2010-09-27 37 views
0

我是TDD現場的新手,試圖隔離我的測試讓我繞着圈子走。困惑於TDD封裝/適配器

我有一個應用程序我想寫的使用OpenXML,因此它有大量的對象,它依靠從外部框架工作。 我認爲這將是一個好主意,這些對象周圍的包裝,所以我被隔離了他們的情況下更改等 我的問題是,代表像一個單元格,我傳遞一個真正的單元格到我的包裝(所以它有東西要包裝)在構造函數中。

爲了測試這個包裝器,我必須從OpenXML框架傳遞一個真正的Cell。確定這是可行的,但我也想將SharedStringTablePart傳入構造函數,以便它可以存儲字符串值(如果它是共享字符串)以便於檢索。 SharedStringTablePart具有一個受保護的構造函數,因此您不能在測試中隨時創建一個測試。

Sooo,我也爲它創建了一個包裝,但是如何測試這個新的包裝呢?我無法通過依賴注入傳遞SharedStringTablePart,因爲我無法構造一個。

我不得不在我的應用程序體系結構中的某個時刻與第三方接口通話,而不是測試該層?

我是否只是創建包裝並且不打擾TDD部分,只是假設他們會工作,如果我通過相同的請求並響應相同的響應實際包裝的對象會期望/做什麼?

不在於它使得在這個水平上有什麼區別,但我使用C#

感謝 內華達州

回答

1

這是與集成代碼的問題,它不適合以及單元測試。

上面並不意味着你要放棄單元測試,而不是整合代碼。

你正在設計這些包裝的方式是緊密地將它們耦合到外部對象。這只是轉移問題/移動代碼。

不要在構造函數中接收外部對象,並在那裏做映射。從所有這些對象中抽取出來,代之以代碼處理它,只有責任是將表示從外部系統映射到內部表示。

這就是您保留其餘代碼的依賴關係的方式。我有一些負責與第三方庫進行通信的代碼,該代碼不會公開你希望從系統其餘部分保留的任何類型。也不會將其隱藏在其他對象中,它可以直接映射它們或調用映射它們的代碼。

+0

也做一個'反腐敗層'的搜索,這可能是你想在這裏。 – 2011-09-12 16:37:39