使用 testng 进行 Spring Boot 单元测试

Adi*_*tya 4 testng spring-boot

如果服务层中特定create方法的返回类型是,如何编写POST方法测试用例ResponseEntity<Object>

这是我的createOffer方法:

public ResponseEntity<Object> createOffer(Offer offer) {
    Offer uoffer = offerRepository.save(offer);


    URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{jobTitle}").
                    buildAndExpand(uoffer.getJobTitle()).toUri();

    return ResponseEntity.created(location).build();

}
Run Code Online (Sandbox Code Playgroud)

这是其对应的测试类方法:

@Test
public void testCreateOffer() {
    Offer offer = new Offer("SE",new Date(),5);
    Mockito.when( offerRepository.save(offer)).thenReturn( offer);
    assertThat(offerServiceImpl.createOffer(offer)).isEqualTo(offer);
}
Run Code Online (Sandbox Code Playgroud)

在这里,我在运行此测试用例时遇到错误,该错误没有当前的 servlet 请求属性,异常是:

java.lang.IllegalStateException

为什么它来了

Adi*_*tya 9

这就回答了上面的问题。

希望当有人发现同样的问题时它会有所帮助!

@Test
public void testCreateOffer() {
    Offer offer = new Offer("SE",new Date(),5);


    MockHttpServletRequest request = new MockHttpServletRequest();
    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));


    URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{jobTitle}").
            buildAndExpand(offer.getJobTitle()).toUri();

    ResponseEntity<Object> response = ResponseEntity.created(location).build();
    Mockito.when( offerRepository.save(offer)).thenReturn(offer);
    assertThat( offerServiceImpl.createOffer(offer)).isEqualTo(response);
}
Run Code Online (Sandbox Code Playgroud)