2011-09-26 42 views
0

目前我的項目中有1個Guice模塊,它定義了所有的綁定。 現在我想編寫集成測試,我需要綁定特定類的依賴關係。如果我使用現有的模塊,Guice將綁定所有依賴關係。但我認爲這在集成測試中不正確。我是否需要爲每個班級編寫集成測試的Guice模塊?

所以,我需要,只有必要的依賴將被綁定爲每個類別的模塊?

謝謝。

回答

3

創建一個吉斯模塊綁定所有綁定在一個項目是不是最佳的,但也不是每個綁定創建一個模塊。

一般情況下,你只是想「組相關的綁定到一個模塊」。這樣做有點藝術,而不是科學,所以我不能給出完美的建議。

如果你的項目有一個堅實的Java包結構,然後創建每包一個吉斯模塊開始(不過,如果您的包裹中含有大量的類,你可能甚至想每包數)的好地方。使用per-package Guice模塊還爲您提供了讓您的實現類成爲包私有的好處(這對封裝很有用!)。

一個具體的例子:如果你的項目有外部依賴,這是件好事,從你的應用程序代碼分開約束力。例如,如果您的Web服務器與另一臺服務器上的RPC服務進行通信,則最好將服務與與服務交談的代碼分開綁定(這樣,您可以嘲笑外部服務而不嘲笑任何應用程序代碼) 。

是一種精神寄託,你也可以使用Modules.override(...) [1],但這樣做通常是一個跡象,表明你的模塊是太大了。

  1. http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/util/Modules.html
+0

正如你所說的,如果你正確地設置了你的類的訪問修飾符(包私有),那麼每個包都不會創建一個模塊。 –

1

是的,你可以有多個模塊,通常你需要一個不同的模塊用於你的測試。如果你沒有使用字段注入,並且它沒有太多的工作,你可以讓你的設置構建帶有構造函數的類,這些構造函數傳遞了被測對象,包括mock。

或者,更常見的是,記住,你的模塊的配置方法可以install other modules,所以如果你劃分這是常規操作和集成測試之間的共同到一個模塊中的東西,剩下的兩個不同的模塊可以分別安裝常見的一種。

+0

謝謝,安裝方法是非常有用的! –

相關問題