Spring boot test минимальный тестовый срез или ручная настройка - PullRequest
0 голосов
/ 23 января 2019

У меня много разных тестов SpringBoot.До сих пор срезы автоматической конфигурации были действительно полезны, особенно в сочетании с @MockBean.

Но в моем текущем тесте такой фрагмент не подходит, и загрузка полного контекста с использованием @SpringBootTest не являетсяслишком медленный.

Есть ли способ вручную установить кончик дерева объектов, с которого нужно начинать, и оттуда пружина автоматически связывает все необходимые бины?Или есть способ установить все необходимые bean-компоненты вручную?

В моем конкретном случае я хочу протестировать сгенерированный MapStruct преобразователь (используя componentModel = "spring"), этот преобразователь использует два других преобразователя, каждый из которых внедряет службу для выполнения своихРабота.

Сервисы предоставляются через @MockBean:

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

    @Autowired
    private PRUMapper mapper;

    @MockBean
    private TradingPartnerService tradingPartnerService;

    @MockBean
    private ProductHierarchyService productHierarchyService;

    @Test
    public void mapForthAndBack(){
      //works but takes ages to boot
    }

}

Я не могу использовать инжектор конструктора в средствах отображения (для сервисов), поскольку MapStruct не будет генерировать правильные реализации.

Как получить Spring-Context, содержащий только необходимые компоненты?

1 Ответ

0 голосов
/ 28 января 2019

Я нашел один способ, явно объявив всю используемую реализацию:

@SpringBootTest(classes = {ProductResponsibleUnitMapperImpl.class, LegalEntityMapperImpl.class, ProductHierarchyMapperImpl.class}) 

Для более сложных установок будет громоздко и также опасно объявлять сгенерированные классы.

Я все еще ищулучший, более чистый способ позволить Spring решить, какие классы нужны.Должна быть возможность установить класс под рукой и позволить Spring самому решить, какие классы нужны и какие экземпляры создавать.

...