У меня проблема с перестановкой бобы в интеграционных тестах весной (со Spock).Весна: перевернутые бобы в интеграционных тестах с изоляцией
Скажет, это мое приложение конфигурация:
@EnableWebMvc
@SpringBootApplication
@Configuration
class Main {
@Bean
Race race(Car car) {
// ...
}
@Bean
Car car() {
// ...
}
}
И у меня есть 2 отдельных интеграционные тесты, которые я хочу, чтобы отделить Car
реализации, предоставляемой.
@Slf4j
@SpringApplicationConfiguration
class OneIntegrationSpec extends AbstractIntegrationSpec {
@Configuration
@Import(Main.class)
static class Config {
@Bean
Car oneTestCar() {
return new FerrariCar();
}
}
}
@Slf4j
@SpringApplicationConfiguration
class OtherIntegrationSpec extends AbstractIntegrationSpec {
@Configuration
@Import(Main.class)
static class Config {
@Bean
Car otherTestCar() {
return new TeslaCar();
}
}
}
Когда я бегу один из них я получаю: NoUniqueBeanDefinitionException
причина Spring обнаруживает есть множество реализаций автомобиля. Как сделать тестовый внутренний класс Config
с аннотацией @Configuration
только для этого конкретного теста? Я видел подход с @Profile
, но это означало бы создание отдельных имен профилей для каждого IntegrationSpec
, который немного нарушает DRY. Есть ли другой подход, чем @ActiveProfiles
?
Быстрое и грязное решение может состоять в том, чтобы просто объявить ваши тестовые бобы @Primary, что обойдется в том, что существует более одного подходящего компонента, так как тогда будет использоваться первичный кандидат. –
Да, но тогда, когда я получил '@ Primary' в' 'IntegrationSpec', возникает одна и та же проблема. – dmydlarz
Почему вы загружаете оба' IntegrationSpec' одновременно? У вас нет самого теста (и как вы загружаете контекст Spring), но, возможно, не используете сканирование компонентов для этих классов. –