web-dev-qa-db-ja.com

Springブートテストでのコンポーネントスキャン用の基本パッケージの構成

testを次の注釈で起動すると:

package com.hello.package.p1;

@RunWith(SpringRunner.class)
@DataMongoTest
@SpringBootTest
public class ClassATest {

@Autowired
Service1 serivce1; //fqn = com.hello.package.p1.Service1 

@Autowired
Service2 serivce2; //fqn = com.hello.package.p2.Service2 

...}

package com.hello.package.p1;

@ActiveProfiles("test")
@SpringBootConfiguration
public class MongoTestConfig {
...
}

service1が注入されます。ただし、service2はテストクラスと同じパッケージにないため、そうなりません。エラーが発生します:

フィールド「service2」で表現された、満たされていない依存関係。ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです

特定のパッケージ(たとえば、com.hello)をロードまたはスキャンすることをテストコンテキストに伝えるにはどうすればよいですか?

8
ElArbi

テストパッケージにTestConfigクラスを追加できます。

@Configuration
@ComponentScan({ "com.hello.package.p1", "com.hello.package.p2" })
public class TestConfig {
}
2
Ortomala Lokni

上記のテスト構成を追加すると便利です。テスト構成とテストケースには、次のものが含まれています。スプリングブートテストは初めてですが、うまくいきます。私が間違っている場合はお知らせください。

    @Configuration
    @ComponentScan("au.some.spring.package")
    public class TestConfig {
    }
    @RunWith(SpringRunner.class)
    @EnableAutoConfiguration
    @SpringBootTest(classes= TestConfig.class)
    @TestPropertySource({"classpath:application.yml", 
    "classpath:env-${testing.env}.properties"})
    public class DBDmoTest {

        @Autowired
        PartyRepository partyRepository;
        @Test
        public void test(){
            Assert.assertNull(partyRepository.findByEmailIgnoreCase("[email protected]"));
        }
    }
1
user2560347