У меня есть @SpringBootTest
аннотированный тестовый класс, который хочет использовать тестовую утилиту:
package org.myproject.server;
// ...
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class ServerITest {
private @Autowired TestHelperBean helper;
// ...
}
Это прекрасно работает, если TestHelperBean
определен в том же пакете, что и тестовый класс (или в подпакете).
package org.myproject.server;
import org.springframework.stereotype.Component;
@Component
public class TestHelperBean {
// ...
}
Если я переместу его в одноуровневый пакет, компонент не будет найден:
org.springframework.beans.factory.NoSuchBeanDefinitionException: нет подходящего компонента bean типа 'org.myproject. testutils .TestHelperBean': ожидается как минимум 1 компонент, который считается кандидатом autowire.Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true)}
Я полагаю, что сканирование компонентов по умолчанию выглядит только в пакете и подпакетах тестового класса- но есть ли способ переопределить это значение по умолчанию?Я пытался добавить аннотацию @ComponentScan
в свой тест, но это, похоже, не дало никакого эффекта:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ComponentScan("org.myproject")
public class ServerITest {
// ...
}
Есть ли способ использовать bean-компоненты из пакетов одного уровня в тестах Spring Boot?