Мне очень трудно писать @SpringBootTest, если вы используете репозитории @ComponentScan и Jpa.Может кто-нибудь посоветовать?Это должно быть очень тривиально, но это нигде не задокументировано.
@SpringBootApplication
@ComponentScan(
excludeFilters = {
@ComponentScan.Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@ComponentScan.Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) },
basePackageClasses = {Main.class, Other.class})
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
и один из обнаруженных классов конфигурации имеет:
@Configuration
@EnableJpaRepositories("jpa")
Теперь я хочу создать тест, который позволитв идеале это просто подмножество репозиториев JPA и ничего более, если я не скажу так.А именно, нет конфигурации из производственного исходного кода.Кажется, это почти невозможно выразить.Вот где я смог получить:
@RunWith(SpringRunner.class)
@SpringBootTest
@Import(TestIT.TestConfig.class)
public class TestIT {
@Configuration
@EnableJpaRepositories("jpa")
@AutoConfigureDataJpa
@AutoConfigurationPackage
public static class TestConfig {
//here will be beans for test.
}
, поэтому эта конфигурация выдает ошибку
java.lang.IllegalArgumentException: Not a managed type ...my jpa repository class
, что, вероятно, означает, что пакет jpa
несреди автоматически настроенных пакетов.Не знаю, как добавить его, если это возможно.
ОК, другой подход.Некоторые источники рекомендуют это:
@RunWith(SpringRunner.class)
@SpringBootTest
@Import(TestIT.TestConfig.class)
public class TestIT {
EnableJpaRepositories("jpa")
@EntityScan(basePackages = "jpa.entities")
//@TestPropertySource("classpath:application.properties")
@EnableTransactionManagement
public static class TestConfig {
//here will be beans for test.
}
, но этот сбой с caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
Любые подсказки?