当前位置: 首页 > 知识库问答 >
问题:

使用@webmvctest进行的Rest控制器测试,无法实例化PagedResources的JAXBContext

隆谦
2023-03-14

我有一些测试失败,因为错误创建名为'Entity ManagerFactory'的bean这个答案为我解决了这个问题https://stackoverflow.com/a/47504698/6945345,但是破坏了我的控制器测试,因为无法实例化类[class org.springframework.hateoas.pagedresources]的JAXBContext:在模块路径或类路径上找不到JAXB-API的实现。这是因为我认为@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个答案

司空玮
2023-03-14

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

--add-modules
java.xml.bind
 类似资料:
  • 关于Spring Boot REST Controller的单元测试,我遇到了@RequestMapping和应用程序属性的问题。 我正在处理应用程序的几个概要文件,因此我有几个文件。在每个文件中都设置并显示属性值。我还有一个用于测试的不同的Spring上下文配置,它与生产性版本仅有一个Bean不同。 on Test, , 使用构建MockMVC 在测试中自动调用RESTController 在S

  • 我试图用JUnit5控制台启动器运行一个简单的测试。我试了几个选择,但都不起作用。谁能告诉我哪里出了问题吗? .+--JUnit Jupiter[OK] '--JUnit Vintage[OK] 测试运行在11毫秒后完成[2个容器] [0个容器跳过][2个容器启动] [0个容器中止][2个容器成功] [0个容器失败][0个测试找到] [0个测试跳过][0个测试启动] [0个测试中止][0个测试成功

  • 问题内容: 我正在尝试使用JUnit5控制台启动器运行一个简单的测试。我尝试了几种选择,但是没有用。有人可以告诉我哪里出了问题吗? 给我警告 我试图在目录中运行所有测试,但这似乎找不到测试: 结果是这样的: 。+-JUnit Jupiter [确定] ‘-JUnit Vintage [确定] 11毫秒后测试运行完成[找到2个容器] [跳过0个容器] [0个容器中止] [2个容器成功] [0个容器失

  • 我试图使用mockmvcbuilders.standalonesetup方法为一个spring mvc rest控制器创建一个非常基本的单元测试。我一直收到一个404错误。下面列出了测试应用程序上下文、测试类、控制器和整个堆栈跟踪。欢迎任何指导。 java.lang.AssertionError:状态应为:<200>但实际为:<404>在org.springframework.test.util.

  • 我有一个运行简单REST服务Spring Boot应用程序。我想测试一下这项服务。因为我喜欢Spock框架,所以我很愿意在这里使用它,但是我不能通过Spring配置的问题。 日志 例外情况

  • 问题内容: 对于我一生,我无法让$ httpBackend在执行$ http get请求的控制器上工作。我已经尝试了几个小时=) 我将其简化为下面可以最简单的形式。如果我通过测试 在控制器中注释掉$ http.get()请求 在测试中注释掉“ httpMock.flush()” 并更改“猪”和“狗”以匹配 也就是说,这是一个有效的工作测试和应用程序。 如果放回去,则会在底部显示错误。 app /