[英]Spring setter dependency injection and immutable object
我們知道,Spring團隊建議在現場注入中使用二傳手注入:
http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/beans.html#d0e2778
這也是通過注入模擬進行單元測試所需要的。
但是,讓我煩惱的是,由於彈簧bean是單例,因此如果在代碼的某些部分中,通過使用setter方法注入不同的依賴關系來重新配置單例bean,那么代碼的其他部分將成為影響,這可能是不必要的。 例如,在代碼的某些部分中注入了特定的時鍾實例,但在代碼的其他部分中可能不希望使用這種特定類型的時鍾。
因此,看起來像是二傳手注,這為高風險業務留下了一些機會。 同時,我們需要一種在測試過程中注入一些模擬的機制。 我們如何才能取得平衡?
此外,我們知道可變對象是不可取的:
http://www.javapractices.com/topic/TopicAction.do?Id=15
那么使用可用於單例bean的setter方法是否不錯?
在這里聽起來有些混亂,一方面您說:
通過注入模擬進行單元測試
在這里,您可以使用Mockito或標准JUnit測試來創建實例並注入適當的依賴項。
但是隨后您繼續說:
代碼的其他部分將受到影響,這可能是不希望的
不是完全的單元測試,但是您可以將Spring Test支持與@DirtiesContext
結合使用,以確保如果您在一個測試中更改了依賴關系,那么將為下一個測試重新加載上下文。
如果您確實需要更改實例字段但沒有設置器,那么作為最后的選擇,您仍然可以在測試過程中使用ReflectionTestUtils
更新字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.