Тест контроллера покоя с @WebMvcTest, Не удалось создать экземпляр JAXBContext для PagedResources - PullRequest
0 голосов
/ 06 октября 2018

У меня есть некоторые тесты, которые не срабатывают с Error creating bean with name 'entityManagerFactory', этот ответ решил это для меня https://stackoverflow.com/a/47504698/6945345, но прервал мой тест контроллера с Could not instantiate JAXBContext for class [class org.springframework.hateoas.PagedResources]: Implementation of JAXB-API has not been found on module path or classpath. Это потому, что я думаю, что @WebMvcTest не подхватывает JAXB-API.Что я должен сделать, чтобы решить эту проблему наилучшим образом?

Тестовый класс контроллера, которому дано исключение:

@RunWith(SpringRunner.class)
@WebMvcTest(BiodiversityController.class)
@Import(SpecieResourceAssembler.class)
public class BiodiversityControllerTest {

    @MockBean
    private SpecieService specieService;

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private SpecieResourceAssembler specieResourceAssembler;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(new BiodiversityController(specieService, specieResourceAssembler))
            .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
            .build();
    }

    @Test
    public void getAllSpecies_ShouldReturnSpecies() throws Exception {
        PageRequest pageRequest = PageRequest.of(0, 20);
        given(specieService.getAllSpecies(pageRequest)).willReturn(new PageImpl<>(
            Collections.singletonList(createAnimaliaOrestias()), pageRequest, 1));

        mockMvc.perform(MockMvcRequestBuilders.get("/species?page=0&size=20"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.content", hasSize(1)))
            .andExpect(jsonPath("$.content.[0].name").value(NAME_ORESTIAS));

        verify(specieService).getAllSpecies(pageRequest);
    }
}

Мои зависимости pom с jaxb-api

 <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.0</version>
    </dependency>
</dependencies>

1 Ответ

0 голосов
/ 06 октября 2018

Если вы используете Java 9 или выше, вам нужно добавить следующие параметры виртуальной машины для запуска тестов / приложения

--add-modules
java.xml.bind
...