我想在类中模拟 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,调试时可以确认。
最佳答案
事实证明,Mockito
在将第一个参数“接受”为 Integer 之后,未能将第二个参数接受为 String。解决方案(经过多次调试)是将测试函数中的 any()
匹配器转换到相应的类类型:
@Test
public void testClass() throws Exception
{
ResultSet rsResult = Mockito.mock(ResultSet.class);
when(clsTableClass.getRecords(
(Integer) any(),
(String) any()).thenReturn(rsResult);
}
现在 Mockito
将匹配参数并且 ResultSet
将不再返回 null
。
关于java - Mockito thenReturn 在来自泛型函数时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48403966/