Я пытаюсь использовать 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 call.
Я уже проверил, что уловщик не является нулевым. Если я изменяю тип аргумента для server.nextMove от int до Integer тогда все работает нормально.
Я также не нашел никакого способа создать что-то вроде «IntArgumentCaptor» (например, anyInt для совпадений).
Есть ли способ, чтобы сделать эту тестовую работу без сервера.nextMove to Integer?
Похоже, это был вопрос Mockito. Я обновился с 1.8.4 до 2.7.1, и теперь проблема исчезла. Благодаря! – MarZ
@MarZ Рад слышать! Интересно, что ArgumentCaptor [похоже, имеет логику «HandyReturnValues», соответствующую типу в 1.8.4] (http://grepcode.com/file/repo1.maven.org/maven2/org.mockito/mockito-core/1.8.4 /org/mockito/ArgumentCaptor.java?av=f), поэтому я не знаю, что такое модернизация, но я рад, что это сработало! –