2013-05-07 41 views
0

有没有一种方法可以测试不使用Mockito不返回任何值的方法? 这是示例方法。我是单元测试新手。在没有嘲笑的java中的void方法中进行适当的单元测试

public void addMantisData(ArrayList<Mantis> list) { 

    try { 
     connection = dataSource.getConnection(); 

     PreparedStatement preparedStatement = connection 
       .prepareStatement("INSERT INTO mantises (ticketId, startDate, endDate, hours, minutes, " + 
         "employeeId, timeIn, timeOut, dateSubmitted, category, status, timestamp) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())"); 

     for (Mantis mantis : list) { 
      preparedStatement.setInt(1, mantis.getTicketId()); 
      preparedStatement.setString(2, mantis.getStartDate()); 
      preparedStatement.setString(3, mantis.getEndDate()); 
      preparedStatement.setInt(4, mantis.getHours()); 
      preparedStatement.setInt(5, mantis.getMinutes()); 
      preparedStatement.setInt(6, mantis.getEmployeeId()); 
      preparedStatement.setString(7, mantis.getStartTime()); 
      preparedStatement.setString(8, mantis.getEndTime()); 
      preparedStatement.setString(9, mantis.getDateSubmitted()); 
      preparedStatement.setString(10, mantis.getCategory()); 
      preparedStatement.setString(11, mantis.getStatus()); 
      preparedStatement.addBatch(); 
     } 

     preparedStatement.executeBatch(); 
     preparedStatement.close(); 

    } catch (SQLException e) { 

    } finally { 
     if (connection != null) { 
      try { 
       connection.close(); 
      } catch (SQLException e) { 

      } 
     } 
    } 
} 

我apprieciate帮助:)

+1

你想要测试什么?如果这是查询的构建,那么你可以考虑把它带到一个单独的方法并测试它。 – Avi 2013-05-07 07:07:52

回答

3

这看起来更像是一个集成测试,然后是一个纯粹的单元测试。此外,我不知道你想测试什么,如果是查询,你需要执行插入,然后尝试从DB和assert获得预期值并获得预期结果。确保您使用自己的数据库实例,并在测试后回滚。 DBUnit会让你感到这件事,检查出来

+0

我明白了。所以如果我继续测试这个方法,它更像是一个集成测试,而不仅仅是一个单元测试。 我目前有一些excerise来提高我的软件测试技能。我现在正在开发的测试是为TAD开发人员准备实际项目。 非常感谢你:) – user2357236 2013-05-07 07:23:58

2

如果你不希望使用任何“模拟”或“间谍”类(手工制作或从的Mockito),你可以考虑一个“廉价”数据库驻留在内存中(或由临时文件支持)。然后,您的代码可以像真实一样通过JDBC发出查询,并且您的单元测试可以准备数据并检查结果(也通过JDBC)。请务必阅读answers for this similar question