2011-06-08 283 views
1

我有一個WCF服務,我正在爲此編寫單元測試用例。我從該服務中的某個方法調用業務層和其他一些WCF服務。我已經爲我的業務層使用了IcO模式。但爲了在這裏使用我的業務層和WCF服務的Mock對象,我需要在創建該服務實例時傳遞它。如果我改變我的默認構造函數來接受它作爲參數,我將不得不將它們暴露給服務使用者。將業務層傳遞給WCF服務

如果我改變服務的構造函數,它看起來就像這樣:

public MyService(MyBusinessLayer bl, SomeWCFService otherSrvc) 
{ 

} 

是否確定要這麼做?我在這裏做錯了什麼?

回答

2

發送服務的接口而不是阻塞。這樣你可以在運行時用你的模擬替換實現。

+0

正確。我可以做到這一點。我也可以爲我的BL做同樣的事情。但是,這樣做可以嗎?這不會給客戶提供「太多的信息」嗎?也可能是它違反封裝主體。不是嗎? – Asdfg 2011-06-08 14:57:49

+0

在一個系統中,我們創建了2個構造函數,其中一個具有測試使用的參數,另一個沒有生產代碼使用的參數。這很奏效,但並不是團隊中的每個人都認爲這是個好主意,因爲測試使用了不同的構造函數。這是一個在兩個邪惡之間進行選擇的例子:) – 2011-06-08 15:08:23

+0

即使我這樣做了,客戶端配置也會將它們公開爲契約,並且它不會在我的控制下要求消費者不要使用參數化構造函數。卡住在這裏:( – Asdfg 2011-06-08 15:10:42