【问题标题】:Getting blank response in spring rest controller unit test cases在弹簧休息控制器单元测试用例中获得空白响应
【发布时间】:2018-10-27 08:32:08
【问题描述】:

我已经为下面的 put 方法编写了弹簧休息控制器的单元测试用例

 @PutMapping("/offers/{jobTitle}")
 public Offer updateOffer(@PathVariable String jobTitle,@Valid @RequestBody Offer offer) {          
           return offerService.updateNoOfPost(jobTitle, offer);
  }

下面是我的服务类

  @Override
    public Offer updateNoOfPost(String jobTitle, Offer offer) {
        if(!offerRepository.existsById(jobTitle))
            throw new ResourceNotFoundException("JobTitle "+jobTitle+" not found !!");
        offer.setNoOfPost(offer.getNoOfPost());
        return offerRepository.save(offer);
    }

我已经使用 testNg 和 mockito 为这个方法编写了单元测试用例

public class OfferControllerTest {

private MockMvc mvc;
private JacksonTester<Offer> jsonOffer;

@Mock
private OfferService service;

@InjectMocks
OfferController offerController;

private Offer offer;

@BeforeMethod
public void setup() {
    offer = new Offer("LSE", new Date(),1);
     MockitoAnnotations.initMocks(this);
      mvc = MockMvcBuilders.standaloneSetup(offerController)
                .build();

      JacksonTester.initFields(this, new ObjectMapper());
}
   @Test
   public void updateOffer() throws  Exception {
       Mockito.when(service.updateNoOfPost("LSE", offer)).thenReturn(offer);
       MockHttpServletResponse response = mvc.perform(
               put("/offers/LSE").contentType(MediaType.APPLICATION_JSON).content(
                       jsonOffer.write(new Offer("SE", new Date(), 19)).getJson()
               )).andReturn().getResponse();
       assertThat(response.getContentAsString()).isEqualTo(new ObjectMapper().writeValueAsString(offer));
   }

我得到的响应代码为 200。但是得到空白 body.请在下面找到错误

FAILED: updateOffer
org.junit.ComparisonFailure: expected:<"[{"jobTitle":"LSE","createdAt":"2018-10-27","noOfPost":1}]"> but was:<"[]">
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

我错过了什么?这是为 spring rest 控制器编写单元测试用例的标准方法吗?

【问题讨论】:

    标签: java spring unit-testing spring-mvc testng


    【解决方案1】:

    下面的模拟应该可以解决问题

    Mockito.when(service.updateNoOfPost(Mockito.any(String.class), Mockito.any())).thenReturn(offer);

    在此处阅读更多信息:stack-46914252

    【讨论】:

    • 对@Barath 有效。我也参考了链接。是解析我们在请求正文中传递的报价 json 的问题,但我们对值进行了硬编码,所以这不是问题。
    • @Ankit 如果以上回答对你有帮助,请采纳。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2017-03-10
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多