SprintBootTest - создавать только необходимые бины - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть код, подобный следующему:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ModelRunnerTest {

    @Autowired
    private SomeRepository repository;

    @Autowired
    private SomeSearcher someSearcher;


    @Test
    public void test(){
        someSearcher.search(repository);
    }
}

Это работает, но также создает все bean-компоненты в том же контексте, что и 2 созданные bean-компонента. Это может занять много времени (и я запускаю этот тест при каждой сборке / развертывании).

Итак, я хотел бы найти способ для теста загрузить только необходимые компоненты для теста. В этом примере это будет только хранилище & someSearcher .

Я знаю, что могу предоставить альтернативную реализацию для bean-компонентов, использующих @BeanMock, но фактические реализации для bean-компонентов все равно будут созданы (хотя и не используются).

Есть предложения?

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете использовать @ContextConfiguration вместо @SpringBootTest, чтобы создать собственный контекст Spring для определенных классов.Spring Boot еще больше упрощает это с классами, разработанными для конкретных случаев использования, например @WebMvcTest или @DataJdbcTest.

Однако этот подход имеет два основных недостатка:

  1. Что вы на самом деле тестируете в этом новом ограниченном контексте?Определенно не производственное приложение, так как вы не запускаете весь контекст Spring.Это может привести к ошибкам, пропущенным тестами, например, могут не быть обнаружены проблемы с переопределением bean-компонентов.

  2. SpringRunner попытается повторно использовать контекст Spring между тестами, если это возможно.Запуск одного большого контекста один раз и совместное использование его во всех тестах может быть быстрее, если у вас есть несколько тестов.

...