我找不到任何与我的问题相关的帖子。我正在使用 Mockito,我想测试控制器内部的行为。我认为问题的核心是当我向模拟接口发送两个参数时,我没有正确使用 Mockito。如果我只发送一个参数,它就可以正常工作。我不认为我也在使用 Spring mock mvc 与此有关。
我有一个界面MyService
:
public MyObject doSomeDoggyStuff(long id, SomeOtherObject soo);
接口的目的是做事,如果成功则返回MyObject。如果找不到对象,则返回 null。
我有一个控制器MyController
:
@RestController
@RequestMapping(value = "/dogs")
public MyController
<snip>
@RequestMapping(method = RequestMethod.POST, value = "/{id}/toys/{toy}")
ResponseEntity<MyObject> doDoggyStuff(@PathVariable Long id, @RequestBody Toy toy) {
MyObject result = this.myService.doSomeDoggyStuff(id, toy);
if(result == null) {
return new ResponseEntity("errorinfo", HttpStatus.NOT_FOUND);
}
else {
return new ResponseEntity<MyObject>(result,HttpStatus.CREATED)'
}
}
我的测试类如下所示:
Public MyControllerTest <snip>
@Mock
private MyService myServiceMock;
@InjectMocks
private MyController myController;
测试方法的相关逻辑是这样的。
MyObject myObj = new MyObject();
Toy toy = new Toy();
when(myServiceMock.doSomeDoggyStuff(1, toy)).thenReturn(myObj);
mockMvc
.perform(
post("/dogs/{id}/toys/{toys}", 1, toy).contentType(
TestUtil.APPLICATION_JSON_UTF8).content(
TestUtil.convertObjectToJsonBytes(toy))).andExpect(status().isCreated())
.andReturn();
我遇到的问题是,我希望在这种情况下,当它在线测试 MyController 时:MyObject result = this.myService.doSomeDoggyStuff(id, toy);
结果应该是我在 thenReturn 中设置的 myObj,但它始终设置为 null。我的服务中有其他方法只接受一个参数并且工作正常。当我使用 Mockito 发送两个参数时,我无法掌握我需要做些什么不同的事情。