Java 单元测试有问题,如何使它只工作一次?
我尝试对此方法进行单元测试:Java 单元测试有问题,如何使它只工作一次?,java,unit-testing,mockito,Java,Unit Testing,Mockito,我尝试对此方法进行单元测试: @Override public Duck getById(Integer id) { try { connection = getNewConnection(); } catch (SQLException e) { log.warning("connection error"); } PreparedStatement preparedS
@Override
public Duck getById(Integer id) {
try {
connection = getNewConnection();
} catch (SQLException e) {
log.warning("connection error");
}
PreparedStatement preparedStatement = getPreparedStatement(SELECT_DUCK_BY_ID);
Duck duck = new Duck();
Frog frog = new Frog();
String temp;
int tempInt;
try {
preparedStatement.setInt(ID, id);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
duck.id(resultSet.getInt(ID));
if ((temp = resultSet.getString(NAME)) != null) {
duck.name(temp);
} else {
duck.name(DEFAULT);
}
...........
我的测试:
@Test
public void testGetById() throws SQLException {
Connection connectionMock = Mockito.mock(Connection.class);
PreparedStatement preparedStatementMock = Mockito.mock(PreparedStatement.class);
ResultSet resultSetMock = Mockito.mock(ResultSet.class);
DuckDAO duckDAO = Mockito.spy(DuckDAO.class);
Mockito.when(duckDAO.getNewConnection()).thenReturn(connectionMock);
Mockito.when(connectionMock.prepareStatement(DuckDAO.SELECT_DUCK_BY_ID)).thenReturn(preparedStatementMock);
Mockito.when(preparedStatementMock.executeQuery()).thenReturn(resultSetMock);
// Mockito.when(resultSetMock.next()).thenReturn(true);
duckDAO.getById(ID);
Mockito.verify(resultSetMock, Mockito.times(1)).getInt(DuckDAO.ID);
}
行中,我已被注释(//)将始终为真,并且我的循环将始终有效。如何使它只工作一次?仍然需要至少执行两次
resultSetMock.next()
方法。首先是让它进入循环,第二个是打破循环
设置调用方法时要返回的连续返回值
//...
Mockito.when(resultSetMock.next()).thenReturn(true, false);
//...
当第一次调用resultStock.next()
让它进入循环时,上面将允许resultStock.next()返回true
,而第二次调用将返回false
停止
现在,在执行测试时,它应该提供预期的行为