【问题标题】:Unit Testing MyBatis Handler单元测试 MyBatis 处理程序
【发布时间】:2014-04-24 19:21:18
【问题描述】:

我使用了 mybatis,作为其中的一部分,我需要编写一个自定义处理程序对象来从数据库 TIMESTAMP 转换为 Java XMLGregorianCalendar 对象。 经过一些测试,转换似乎工作,除了它没有正确返回时间。

为了确保我能正确运行它并且我有测试来证明可以转换的内容,我试图编写一个 junit 测试来涵盖转换。

在测试中,我有以下几点:

XMLGregorianCalendarHandler handler = new XMLGregorianCalendarHandler();

我正在尝试使用以下方法测试 getResults 方法:

assertEquals(expectedDate , handler.getResult(rs, "timestamp"));

但是,我不确定如何实际“创建”一个虚拟 ResultSet 对象以作为“rs”对象传入,以便处理测试。

谁能指出我正确的方向?关于如何测试 mybatis 的对象处理程序,我是否走在正确的轨道上?

实际测试代码为:

@Test
public void testConvertTimestamp() throws SQLException, DatatypeConfigurationException{
    String dbTimestamp = "24-APR-14 15.47.44.000000000";

    XMLGregorianCalendar expectedDate = null;
    GregorianCalendar c = new GregorianCalendar();
    c.set(GregorianCalendar.DAY_OF_MONTH, 24);
    c.set(GregorianCalendar.MONTH, GregorianCalendar.APRIL);
    c.set(GregorianCalendar.YEAR, 2014);

    c.set(GregorianCalendar.HOUR_OF_DAY, 15);
    c.set(GregorianCalendar.MINUTE, 47);
    c.set(GregorianCalendar.SECOND, 44);
    c.set(GregorianCalendar.MILLISECOND, 000000000);

    expectedDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);        

    ResultSet rs;       

    assertEquals(expectedDate , handler.getResult(rs, RS_COLUMN_NAME));

}

【问题讨论】:

    标签: java unit-testing junit mocking mybatis


    【解决方案1】:

    使用任何模拟库来创建结果集模拟。在 Mockito 中,这可能看起来像:

    ResultSet rs = Mockito.mock(ResultSet.class);
    
    Mockito.when(resultSetMock.next()).thenReturn(true).thenReturn(false);    
    Mockito.when(resultSetMock.getString(RS_COLUMN_NAME)).thenReturn(dbTimestamp);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2011-06-23
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      相关资源
      最近更新 更多