【问题标题】:Rest controller test with @WebMvcTest, Could not instantiate JAXBContext for PagedResources使用 @WebMvcTest 进行休息控制器测试,无法为 PagedResources 实例化 JAXBContext
【发布时间】:2019-03-11 16:07:23
【问题描述】:

我有一些测试在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);
    }
}

我对 jaxb-api 的 pom 依赖项

 <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>

【问题讨论】:

    标签: java spring-boot spring-hateoas spring-boot-test spring-mvc-test


    【解决方案1】:

    如果您使用 Java 9 或更高版本,则需要添加以下 VM 选项来启动测试/应用程序

    --add-modules
    java.xml.bind
    

    【讨论】:

    • 确实使用了java 10,我最终在我的pom文件中这样做了
    猜你喜欢
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2014-04-06
    • 2018-10-17
    • 2017-03-10
    • 1970-01-01
    相关资源
    最近更新 更多