Контракт Spring Cloud не выполняется @Before - PullRequest
0 голосов
/ 09 июля 2020

Я пишу тесты, используя Spring Cloud Contract. В моей конфигурации я использую для тестирования базу данных в памяти, которая создается и уничтожается при каждом запуске теста. Для успешного тестирования мне нужно поместить некоторые данные в БД, но похоже, что аннотация classi c @Before, используемая в jUnit, не работает (код в ней никогда не выполняется).

import io.restassured.module.mockmvc.RestAssuredMockMvc;
import org.junit.Before;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.web.context.WebApplicationContext;


@ExtendWith(SpringExtension.class)
@SpringBootTest
public class BaseTestClass {

    private static final Logger LOGGER = LoggerFactory.getLogger(BaseTestClass.class);

    @Autowired
    EntityRepository entityRepository;

    @Autowired
    private WebApplicationContext context;

    @Before
    public void init() {
        // This code never runs
        LOGGER.info("Init started");
        MyEntity entity1 = new MyEntity();
        entityRepository.save(entity1);
    }

    @BeforeEach
    public void setup() {
        RestAssuredMockMvc.webAppContextSetup(context);
    }

}

Что мне не хватает?

Ответы [ 2 ]

1 голос
/ 09 июля 2020

@Before принадлежит JUnit4 и ранее, а @BeforeEach принадлежит JUnit5 в качестве замены и уточнения @Before. Если вы работаете с JUnit5, возможно, поместите все логики инициализации c в @BeforeEach (или, если это одноразовый запуск, в @BeforeAll)

0 голосов
/ 09 июля 2020

Я нашел решение, которое работает.

Я неправильно добавлял декоратор @TestInstance, вот мое рабочее решение:

import io.restassured.module.mockmvc.RestAssuredMockMvc;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.web.context.WebApplicationContext;


@ExtendWith(SpringExtension.class)
@SpringBootTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class BaseTestClass {

    private static final Logger LOGGER = LoggerFactory.getLogger(BaseTestClass.class);

    @Autowired
    EntityRepository entityRepository;

    @Autowired
    private WebApplicationContext context;

    @BeforeAll
    public void init() {
        LOGGER.info("Init started");
        MyEntity entity1 = new MyEntity();
        entityRepository.save(entity1);
    }

    @BeforeEach
    public void setup() {
        RestAssuredMockMvc.webAppContextSetup(context);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...