Mockito를 사용하여 "int"유형의 인수를 캡처하려고합니다. 원시 형에 대한 Mockito ArgumentCaptor를 작성하는 방법은 무엇입니까?
이
내가 테스트 해요 코드 :public class Client {
private final Board board;
private final Server server;
private void makeMove() {
nextMove = 11;
server.nextMove(nextMove);
}
public void moveAccepted(boolean accepted) {
if (accepted) {
board.updateBoard(nextMove);
} else {
...
}
}
}
그리고 이것은 테스트 코드입니다 :
@RunWith(MockitoJUnitRunner.class)
public class ClientTest {
private Client client;
@Mock
private Board mockBoard;
@Mock
private Server mockServer;
@Captor
private ArgumentCaptor<Integer> moveCaptor;
@Test
public void testGamePlay() {
client.forceNextMove();
verify(mockServer).nextMove(moveCaptor.capture()); // NPE here
client.moveAccepted(true);
verify(mockBoard).updateBoard(eq(moveCaptor.getValue()));
}
}
하려고 내가 시험에 NullPointerException이 받고 있어요 결과, 캡처 값은 으로 전달됩니다. server.nextMove 호출.
캡쳐가 null인지 이미 확인했습니다. server.nextMove에 대한 인수 유형을 int에서 정수로 변경하면 정수 모두 올바르게 작동합니다.
"IntArgumentCaptor"와 같은 것을 만들 수있는 방법을 찾지 못했습니다 (matcher 용 anyInt).
server.nextMove없이이 테스트 작업을 수행하는 방법은 있습니까 정수?
Mockito 문제인 것처럼 보입니다. 나는 1.8.4에서 2.7.1로 업데이트되었고 지금은 문제가 없어졌다. 감사! – MarZ
@MarZ 듣기 좋다! 흥미롭게도 ArgumentCaptor는 1.8.4에서 타입에 맞는 "HandyReturnValues"논리를 가지고있는 것 같습니다 (http://grepcode.com/file/repo1.maven.org/maven2/org.mockito/mockito-core/1.8.4). /org/mockito/ArgumentCaptor.java?av=f), 업그레이드가 무엇인지 잘 모릅니다. 그러나 기뻤습니다. –