Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.AssertionError:预期状态:<;200>;但事实是:<;201>;_Java_Spring_Junit_Sp - Fatal编程技术网

java.lang.AssertionError:预期状态:<;200>;但事实是:<;201>;

java.lang.AssertionError:预期状态:<;200>;但事实是:<;201>;,java,spring,junit,sp,Java,Spring,Junit,Sp,嗨,我正在尝试在我的控制器中实现junit。但我得到的是201而不是200 下面是我的控制器 @RestController @RequestMapping(value = "/treat") public class TreatController { private final TreatService treatService; @Autowired public TreatController(TreatService treatService){ this.trea

嗨,我正在尝试在我的控制器中实现junit。但我得到的是201而不是200

下面是我的控制器

@RestController
@RequestMapping(value = "/treat")
public class TreatController {

  private final TreatService treatService;

@Autowired
  public TreatController(TreatService treatService){
    this.treatService = treatService;
  }

@PostMapping
  public ResponseEntity<CommonResponse> addNew(
      @RequestBody Treat treat) throws RecordNotFoundException{
    CommonResponse response = new CommonResponse();
    response.setStatus(CommonConstants.OK);
    response.setData(treatService.save(treat));
    return new ResponseEntity<>(response, HttpStatus.CREATED);
  }
}
有什么我错过的吗?
顺便说一下,我不使用Json。我插入它是因为它可以工作。

这就是您返回的内容

return new ResponseEntity<>(response, HttpStatus.CREATED);
返回新的ResponseEntity(response,HttpStatus.CREATED);
HttpStatus.CREATED
返回201并指示请求已创建资源

在您的测试用例中,您期望OK(200)
.andExpect(status().isOk())


根据Post请求,应始终创建资源。因此,从那里返回201是有意义的。您需要做的就是将testcase断言预期值更改为HTTPStatus.CREATED。

这就是您返回的结果

return new ResponseEntity<>(response, HttpStatus.CREATED);
返回新的ResponseEntity(response,HttpStatus.CREATED);
HttpStatus.CREATED
返回201并指示请求已创建资源

在您的测试用例中,您期望OK(200)
.andExpect(status().isOk())


根据Post请求,应始终创建资源。因此,从那里返回201是有意义的。您只需将testcase断言的预期值更改为HTTPStatus.CREATED。

谢谢。你对我的代码设计有什么建议吗?没什么!对于较新版本的spring,您可以简单地使用@Autowired和字段,并避免为字段编写setter。“您对我的代码设计有什么建议吗?”-是的-了解您的代码的功能以及为什么这样做。诸如“我不使用Json,我只是因为它能工作而插入它”(提示:您确实使用Json)之类的短语强烈暗示您的方法就是复制和粘贴您找到的代码,并希望它能工作。这将给您带来完全可以避免的困难,尤其是当您编写的代码的大小和复杂性增加时。花一些时间阅读您正在使用的库的官方文档(在本例中为Spring和Mockito)以正确理解它,它将获得巨大的回报。在我的例子中,它甚至在测试和控制器中正确指定了
HttpStatus.CREATED
时也不起作用。我怀疑这是Mockito中未记录的错误。最后,我重构了控制器/测试代码,删除了所有提到的
ResponseEntity
包装,并用
@ResponseStatus(HttpStatus.CREATED)
@ResponseStatus(HttpStatus.OK)
对方法进行了修饰,这似乎对Mockito很好,谢谢。你对我的代码设计有什么建议吗?没什么!对于较新版本的spring,您可以简单地使用@Autowired和字段,并避免为字段编写setter。“您对我的代码设计有什么建议吗?”-是的-了解您的代码的功能以及为什么这样做。诸如“我不使用Json,我只是因为它能工作而插入它”(提示:您确实使用Json)之类的短语强烈暗示您的方法就是复制和粘贴您找到的代码,并希望它能工作。这将给您带来完全可以避免的困难,尤其是当您编写的代码的大小和复杂性增加时。花一些时间阅读您正在使用的库的官方文档(在本例中为Spring和Mockito)以正确理解它,它将获得巨大的回报。在我的例子中,它甚至在测试和控制器中正确指定了
HttpStatus.CREATED
时也不起作用。我怀疑这是Mockito中未记录的错误。我最终重构了控制器/测试代码,删除了所有提到的
ResponseEntity
包装器,并用
@ResponseStatus(HttpStatus.CREATED)
@ResponseStatus(HttpStatus.OK)
来装饰这些方法,这些方法似乎可以很好地与Mockito配合使用