【问题标题】:how to mock resultmetadata for junit testing如何模拟结果元数据以进行junit测试
【发布时间】:2020-06-03 12:31:58
【问题描述】:

使用结果元数据具有一个功能。

    ResultSet rs // coming from some sql query.
    ResultSetMetaData rsmd = rs.getMetaData();
    if(rsmd.getColumnName(1).toString().equalsIgnoreCase("something"))
    {
    //do something here
    }

我以前模拟过结果集,但不知道如何模拟结果元数据或将所需的列名放入结果集中? 我试过了:

    ResultSetMetaData rsmd = Mockito.mock(ResultSetMetaData.class);
    Mockito.when(rsmd.getColumnName(1)).thenReturn("Somwthing");

但是没用

【问题讨论】:

  • 当您说“没用”时,它是否抛出了 Exception,或者只是没有返回预期的“Somwthing”?
  • 它没有返回 Somwthing
  • 如果在设置rsmd 变量后在“使用结果元数据的函数”中放置断点,并查看那里rsmd 的调试信息,以及测试类中的调试信息(您应该能够进一步单击调用堆栈以进入您的测试方法)它们是同一个实例吗?
  • 我认为两者都是不同的实例,我在测试类中用来模拟的那个显示了一些 id,但主要方法显示 rsmd 为 null

标签: java spring-boot mockito junit4 maven-surefire-plugin


【解决方案1】:

这是您需要做的一个示例:

import org.mockito.Mockito;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;

public class Test {


    @org.junit.Test
    public void test() throws SQLException {

        // prepare the dependant mock
        ResultSetMetaData rsMetaMock = Mockito.mock(ResultSetMetaData.class);
        when(rsMetaMock.getColumnName(eq(1))).thenReturn("something");

        // prepare main mock for result set and define when 
        // main mock to return dependant mock
        ResultSet rs = Mockito.mock(ResultSet.class);
        when(rs.getMetaData()).thenReturn(rsMetaMock);

        // application logic
        ResultSetMetaData rsmd = rs.getMetaData();

        //assertions
        assertEquals(rsmd.getColumnName(1), "something");
    }
}

【讨论】:

  • 我无法导入 import org.mockito.ArgumentMatchers.eq;。还有其他选择吗?
  • 您能告诉我您使用的是哪个版本的 Mockito。
  • 不使用 ArgumentMatcher:when(rsMetaMock.getColumnName(1)).thenReturn("something");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2010-12-11
相关资源
最近更新 更多