Mockito thenReturn在从通用函数返回时返回null

5

我想在一个类中模拟ResultSet,它的参数来自一个通用的返回函数(getSQLValue):

public class MyClass{

    TableClass clsTableClass;

    public void getResults(Integer index, Integer value, String str) throws SQLException {

        try (ResultSet rsResult = clsTableClass.getRecords(
                getSQLValue(index, value, -1),
                getSQLValue(index, str, "")))
        {
            // do stuff
        }
    }

    private <T> T getSQLValue(Integer index, T t, T def) {
        return (index> 0) ? def : t;
    }
}

具有签名方法的表类:

public class TableClass {

    public ResultSet getRecords(Integer value, String str)  {
        // do stuff
    }

以下是单元测试类:

public class MyClassTest {

    @Mock(name = "clsTableClass")
    TableClass clsTableClass;
    @InjectMocks
    MyClass clsMyClass;

    @Before
    public void setUp() throws Exception
    {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testClass() throws Exception
    {
        ResultSet rsResult = Mockito.mock(ResultSet.class);

        when( clsTableClass.getRecords(
                any(Integer.class),
                any(String.class)).thenReturn(rsResult);
    }
}

问题在于ResultSet始终为null,我可以在调试时确认。
1个回答

11

原来发现Mockito在“接受”第一个参数作为整数后,无法接受第二个参数作为字符串。解决方法(经过大量调试后)是将测试函数中的any()匹配器强制转换为相应的类类型:cast

@Test
public void testClass() throws Exception
{
    ResultSet rsResult = Mockito.mock(ResultSet.class);

    when(clsTableClass.getRecords(
            (Integer) any(),
            (String) any()).thenReturn(rsResult);
}

现在,Mockito将匹配参数,ResultSet将不再返回null


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接