Дублирующая ошибка определения макета при использовании @MockBean для переопределения bean-компонента в нескольких тестовых классах Spring Boot

У меня есть несколько тестов 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 ;
}

А затем расширил мои тестовые классы, но в какой-то момент компонент не был внедрен в контекст, и я получил связанные с этим ошибки.

Заранее спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Измените имя поля экземпляра, содержащее @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...
}

Посмотрите, поможет ли это.

Это не сработало для меня

rasilvap 19.08.2024 17:46
Ответ принят как подходящий

Укажите уникальные имена для каждого @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 19.08.2024 17:47

Странно, а вы уверены, что имена отличаются друг от друга? @rasilvap

Jan Itor 19.08.2024 18:28

Другие вопросы по теме