Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单元测试有问题,如何使它只工作一次?_Java_Unit Testing_Mockito - Fatal编程技术网

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
停止

现在,在执行测试时,它应该提供预期的行为