У меня есть несколько тестов Spring Boot, в которых мне нужно переопределить компонент, загружаемый в тестовом контексте, с помощью аннотации @SpringBootTest. В одном из моих тестовых классов я успешно использовал аннотацию @MockBean для переопределения компонента AwsFireLogger, определенного в thConfiguration.class. Однако, когда я добавил аннотацию @MockBean в другой тестовый класс, который также использует тот же класс конфигурации, я столкнулся с ошибкой с сообщением «Дублирование макетного определения». Как я могу решить эту проблему и успешно переопределить компонент в обоих тестовых классах?
Вот пример структуры кода:
@SpringBootTest(classes = { thConfiguration.class, CaffeineCacheConfiguration.class })
public class FirstTestClass {
@MockBean
private AwsFireLogger awsFireLogger;
// Rest of the test code...
}
@SpringBootTest(classes = { thConfiguration.class, CaffeineCacheConfiguration.class })
public class SecondTestClass {
@MockBean
private AwsFireLogger awsFireLogger;
// Rest of the test code...
}
Когда я запускаю тесты, первый тестовый класс выполняется успешно, но второй тестовый класс выдает исключение с сообщением «Дублировать определение макета». Как я могу решить эту проблему и гарантировать, что оба тестовых класса могут переопределить компонент AwsFireLogger?
Я также попробовал сделать что-то вроде:
public class BaseIntegrationTest {
@MockBean
AwsFireLogger awsFireLogger ;
}
А затем расширил мои тестовые классы, но в какой-то момент компонент не был внедрен в контекст, и я получил связанные с этим ошибки.
Заранее спасибо!




Измените имя поля экземпляра, содержащее @MockBean, и повторите попытку проверки.
Обновленный код:
@SpringBootTest(classes = { thConfiguration.class, CaffeineCacheConfiguration.class })
public class FirstTestClass {
@MockBean
private AwsFireLogger awsFireLoggerFirstTest;
// Rest of the test code...
}
@SpringBootTest(classes = { thConfiguration.class, CaffeineCacheConfiguration.class })
public class SecondTestClass {
@MockBean
private AwsFireLogger awsFireLoggerSecondTest;
// Rest of the test code...
}
Посмотрите, поможет ли это.
Укажите уникальные имена для каждого @MockBean:
@SpringBootTest(classes = { thConfiguration.class, CaffeineCacheConfiguration.class })
public class FirstTestClass {
@MockBean(name = "firstAwsFireLogger")
private AwsFireLogger awsFireLogger;
// Rest of the test code...
}
@SpringBootTest(classes = { thConfiguration.class, CaffeineCacheConfiguration.class })
public class SecondTestClass {
@MockBean(name = "secondAwsFireLogger")
private AwsFireLogger awsFireLogger;
// Rest of the test code...
}
Вроде работает, но мне пришлось назвать только второй, по какой-то причине, если я назову оба, я получу одну и ту же ошибку.
Странно, а вы уверены, что имена отличаются друг от друга? @rasilvap
Это не сработало для меня