[英]How to override the behavior of Spring @Autowired
一點背景:
我正在使用Spring 2.5,特別是Spring IOC和注釋。
我在我的代碼中使用@Autowired
(自動裝配按類型完成)並使用@Component
將類暴露給自動布線。
我試圖測試我的代碼時出現了下面描述的情況。
現在來問題:
注意:我為Test環境使用不同的Spring Context。
我有一個類FOO
,它是@Autowired
但在測試環境中我想使用相同類型的另一個類MockFoo
(擴展FOO
)。
由於FOO
類的依賴注入的多個選項( FOO
和MockFOO
符合Type檢查),Spring設置當然會自動失敗。
我正在尋找一種方法來注入測試bean而不是原始的bean。
我希望Spring允許使用Context配置文件來覆蓋bean注入或命令Spring不要自動裝配特定的bean。
但
所有這些選項似乎只存在於最初在Spring Context Configuration文件中定義的bean。
使用ReflectionTestUtils
手動設置Mock代替自動連接的依賴項(為此目的,您的模擬不能是彈簧管理的,因此不存在歧義)
我同意迪迪埃的觀點。 下面是一個示例,說明如何在測試應用程序上下文中排除要模擬的實現。
<context:component-scan base-package="com.company" >
<context:exclude-filter type="regex" expression="com\.abc\.service\.XDaoImpl"/>
</context:component-scan>
在測試中包含此應用程序上下文,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/applicationContext-test.xml"})
public class MyTest {....}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.