【问题标题】:Mock Unit Test Case For Spring jdbc template for RowMapper用于 RowMapper 的 Spring jdbc 模板的模拟单元测试用例
【发布时间】:2020-11-13 02:04:05
【问题描述】:

我正在尝试使用 Junit 为我的 StudentRowmapper 类进行测试,我对单元测试和 Mock 测试有点新,我之前问过 smilar 问题,但我不知道如何模拟 Datetime.of 对象。当我运行测试时; DateTimes 抛出空指针异常

学生组列表如下;

    @Getter
    @Setter
    public class StudentGroupList {
    
     private String studentId;
     private LocalDateTime studentDate();
    }

StudentGroupListRowMapper 下面;

public class StudentGroupListRowMapper implements RowMapper<StudentGroupList> {

  @Override
  public StudentGroupList mapRow(Resultset rs, int rowNum) throws SQLException {

  StudentGroupList studentGroupList = new StudentGroupList();
 
  studentGroupList.setStudentId(rs.getString("student_id"));
  studentGroupList.setStudentDate(rs.getTimestamp("student_date").toLocalDateTime());

  return studentGroupList;
 }
}

下面是我的单元测试;

private static int rowNum = 2;
  private StudentGroupListRowMapper mapper;
  private ResultSet resultSet;
  private StudentGroupList studentGroupList;

 @Before
 public void setUp() {
   studentGroupList = new StudentGroupList();
   mapper = new StudentGroupListRowMapper();
   resultSet = mock(ResultSet.class);
 }
  

     @Test
     public void testmapRow() throws SQLException {
    
     when(resultSet.getString("student_id")).thenReturn("sutdent-id-1");
     when(resultSet.getTimeStamp("student_date").toLocalDateTime()).thenReturn(LocalDateTime.of(2001,3,17,2,10)));
    
    studentGroupList mapper.mapRow(resultSet, rowNum);
    
    assertEquals(studentGroupList .getStudentId(), "sutdent-id-1");
    assertEquals(studentGroupList .getStudentDate, LocalDateTime.of(2001,3,17,2,10)); 
     
     }

【问题讨论】:

    标签: spring spring-boot spring-mvc junit java-8


    【解决方案1】:
    
      private static int rowNum = 2;
      @InjectMocks
      private StudentGroupListRowMapper mapper;
      @Mock
      private ResultSet resultSet;
      @Mock
      private StudentGroupList studentGroupList;
    
      @Before
      public void setUp() {
        MockitoAnnotations.initMocks(this);
        studentGroupList = new StudentGroupList();
        mapper = new StudentGroupListRowMapper();
        resultSet = createResultSet();
      }
    
      createResultSet(){
      resultSet = new ResultSet();
      resultSet.setStudentId(111);
      resultSet.setStudentId(LocalDateTime.of(2001,3,17,2,10));
      }
      
    
      @Test
      public void testmapRow() throws SQLException {
       
      studentGroupList = mapper.mapRow(resultSet, rowNum);
       
      asserThat(studentGroupList.getStudentId()).isEqualTo(110);
      asserThat(studentGroupList.getStudentId()).isEqualTo(LocalDateTime.of(2001,3,17,2,10));  
         
      }
    
    

    我建议你将 String 学生 id 转换为 int 或解析字符串。我只是使用了一个整数。据我所知,这是我为您提供的解决方案。希望你能理解测试的结构。还有更多方法可以做到这一点

    【讨论】:

    • 感谢您的回答,我已经使用并离开了我的测试类,但没有任何改变。
    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2016-09-20
    • 1970-01-01
    • 2022-10-01
    相关资源
    最近更新 更多