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
)をロードまたはスキャンすることをテストコンテキストに伝えるにはどうすればよいですか?
テストパッケージにTestConfig
クラスを追加できます。
@Configuration
@ComponentScan({ "com.hello.package.p1", "com.hello.package.p2" })
public class TestConfig {
}
上記のテスト構成を追加すると便利です。テスト構成とテストケースには、次のものが含まれています。スプリングブートテストは初めてですが、うまくいきます。私が間違っている場合はお知らせください。
@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]"));
}
}