私の問題に関連する投稿が見つかりませんでした。私は Mockito を使用しており、コントローラー内の動作をテストしたいと考えています。問題の核心は、モックされたインターフェイスに 2 つの引数を送信するときに Mockito を正しく使用していないことだと思います。引数を 1 つだけ送信すると問題なく動作します。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 に設定されています。私のサービスには、引数を 1 つだけ受け入れる他のメソッドがあり、正常に動作します。Mockito を使用して 2 つの引数を送信するときに、別の方法で何をする必要があるかを把握できません。