2010-05-07 112 views
1

我有一個注入了autowire註釋(無限定符)的bean。現在,出於測試的原因,我想向bean注入一些模擬代碼,而不是那些被自動裝配的模塊(一些DAO)。有沒有什麼方法可以在不修改我的bean的情況下更改注入的bean?我不喜歡添加註釋我的代碼只是爲了測試它,然後刪除然後生產。我使用spring 2.5。向具有@Autowired註釋的bean注入模型

豆子是這樣的:

@Transactional 
@Service("validaBusinesService") 
public class ValidaBusinesServiceImpl implements ValidaBusinesService { 

    @Autowired 
    OperationDAO operationDAO; 
    @Autowired 
    BinDAO binDAO; 
    @Autowired 
    CardDAO cardDAO; 
    @Autowired 
    UserDAO userDAO; 

    ... 
    ... 
} 
+1

只要答案適合你,你應該將其標記爲已接受(在投票計數器下面打鉤) – Bozho 2010-05-07 15:54:27

回答

1

使用ReflectionTestUtils在單元測試手動設置不同的實現。

這實際上是依賴注入的力量之一 - 它不關心類如何注入其依賴關係

+0

我不知道那個班級。看起來不錯! – santiagozky 2010-05-07 15:28:50

0

恕我直言,你應該提供setter來獲得手動注入的依賴關係。那麼在單元測試用例中這是一件不容易的事情。如果您不希望setter可以從包外部調用,可能會將類的可見性降低爲默認值。

如果您想使用集成測試場景模擬考試,你可以創建模擬豆類這樣的:

<bean class="….Mockito" factory-method="mock"> 
    <constructor-arg value="….OperationDao" /> 
</bean> 

這將設置一個Mockito模擬爲OperationDao如春豆。

+0

我同意讓setter和getters成爲一個好主意,特別是如果在某些時候我沒有使用這些類的話。但對於這個特定的情況,我不能改變這些類 – santiagozky 2010-05-11 22:51:28