Подделка bean-компонента с тестом SpringBoot на интеграционном тесте

Так же, как @MockBean и @SpyBean, есть ли что-то похожее на @FakeBean / @DummyBean?

Идея состоит в том, что экземпляр является на 100% реальным (с ожидаемым внутренним состоянием производства) и переопределяет (или добавляет компонент, если он не объявлен в конфигурации) экземпляр в контексте. В идеале вам не нужно создавать класс TestConfiguration и устанавливать его как Primary, потому что таким образом вы контролируете подделку для каждого теста, только когда вам это нужно. В противном случае он использует основной.

Это очень полезно, например, когда bean-компонент является сборщиком данных контекста, поэтому его можно очищать с помощью MockReset.AFTER каждого теста.

Каков самый чистый способ добиться этого. Подходит ли @SpyBean, даже если мы на самом деле не шпионим?


person Whimusical    schedule 02.10.2018    source источник
comment
Я думаю, что это не очень хорошая идея. Автоматическое создание bean-компонентов может иметь большие накладные расходы, поскольку в некоторых случаях процесс шаг за шагом будет создавать весь контекст. Лучше создать TestContext и контролировать создание bean-компонента, потому что там, где нужно, вы создаете настоящие bean-компоненты, а там, где нужно, создаете mock. Если вы создадите mock, bean-компоненты внутри него не будут созданы и не потребуются для вашего тестового контекста, в отличие от автоматического процесса.   -  person borino    schedule 03.10.2018
comment
Можете ли вы написать ответ с этим, плохо одобряю, так как я слышал это объяснение от других людей   -  person Whimusical    schedule 03.10.2018


Ответы (1)


Я думаю, что это не очень хорошая идея. Автоматическое создание bean-компонентов может иметь большие накладные расходы, поскольку в некоторых случаях процесс шаг за шагом будет создавать весь контекст. Лучше создать TestContext и контролировать создание bean-компонента, потому что там, где нужно, вы создаете настоящие bean-компоненты, а там, где нужно, создаете mock. Если вы создадите mock, bean-компоненты внутри него не будут созданы и не потребуются для вашего тестового контекста, в отличие от автоматического процесса.

PS.Spring has good error explanation (related to the required bean declaration) and @MockBean or @SpyBean can be declared on class level with multiple classes for easy and fast declaration.

person borino    schedule 03.10.2018