亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有@Qualifier @Autowired 值的測試類

帶有@Qualifier @Autowired 值的測試類

白豬掌柜的 2023-03-09 14:08:02
我正在測試一個有價值的類@Qualified @Autowired:// class under testclass C1() {    @Autowired    @Qualified("c1")    DataSource d1;    ...}DataSourced1位于配置文件中。但是當我測試同一個類并且我使用單獨的DataSource測試配置類時:// test for class@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = testC1Config.class, loader=AnnotationConfigContextLoader.class)class testC1() {    @Autowired    @Qualified("c1Test")    DataSource d1Test;    ...}// testC1Config@Configurationclass testC1Config() {    @Bean    @Qualified("c1Test")    DataSource c1Test() {    ...    }}我得到這個例外:Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=c1)}說他只看到只有 Qualifier 的 DataSource Bean c1。嘗試使用@Bean(name=c1Test")但我得到相同的結果..我如何讓他看到測試包中的 c1Test DataSource bean?
查看完整描述

1 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

好的,所以我做了一個可行的解決方法。


(在幕后)對于我的情況,我在測試和 src 包中有 2 個數據源,當我在 src 中測試方法時,他有@Autowired數據源并且他要求使用符合條件的 bean c1,但是因為我沒有c1數據源我testC1Config()得到了這個例外。


因此,我在 src 配置 bean 中編寫了帶有包含相同名稱的限定符的自動裝配setter ,而不是自動裝配一個 bean 并使用具有特定名稱的限定符。


    @Autowired

    @Qualifier("c1")

    public void setDataSource(DataSource dataSource) {

        this.jdbcTemplate = new JdbcTemplate(dataSource);

    }

對于我的情況,我也在構建 2 個 jdbcTemplates,這樣每當我運行測試 Bean 時都會注入我需要的 DataSource 并在之前為我做一些事情@Test。如果這樣做,配置中不需要 bean 名稱,但在服務中@Qualifier("with_same_name_in_src_and_test")。


不知道這是否是解決此問題的好方法,但是......它有效。


查看完整回答
反對 回復 2023-03-09
  • 1 回答
  • 0 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號