我是使用java中的mockito进行junit测试的新手。我被困在一个点上。 我有一个抽象类AbstractA需要测试。 AbstractA的实现如下。如何处理在java中使用junit mockito依赖抽象方法的测试类
public abstract class AbstractA implements ADao {
@Autowired
NamedParameterJdbcTemplate jdbcTemplate;
@Override
public List<String> getColumns(Set<String> ids) {
String sql = query();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("ids", ids);
return jdbcTemplate.query(sql, paramMap, rowMapper());
}
abstract protected String query();
abstract protected AbstractIpRowMapper rowMapper();
}
而且上面的测试类是AbsractATest
public class AbsractATest {
@InjectMocks
AbsractA abstractA;
@Mock
NamedParameterJdbcTemplate jdbcTemplate;
@Mock AbstractIpRowMapper abstractIpRowMapper;
@Before
public void setUp() throws IOException, SQLException {
abstractA=Mockito.mock(AbsractA.class, Mockito.CALLS_REAL_METHODS);
jdbcTemplate=mock(NamedParameterJdbcTemplate.class);
List<String> idsinput=new ArrayList<String>();
idsinput.add("123");
idsinput.add("124");
idsinput.add("125");
Set<String> ids=new LinkedHashSet<String>();
ids.add("123");
ids.add("124");
ids.add("125");
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("ids", ids);
String query="select ids from tableA where ids=:ids";
when(abstractA.query()).thenReturn(query);
when(jdbcTemplate.query(query, paramMap,rowMapper())).thenReturn(idsinput);
org.springframework.test.util.ReflectionTestUtils.setField(abstractA, "jdbcTemplate", jdbcTemplate);
}
protected AbstractIpRowMapper rowMapper() {
return absractIpRowmapper;
}
But after running this test case I am getting empty value for
abstractA.getColumns();
请帮助我明白我应该需要在上述情况下做的。
感谢您的回复,但我没有完全确定。请详细说明。 – Kamini
我想你的意思是说直接给我输入想要测试的方法调用。但我认为它不是那么测试,如果你已经为该方法调用返回相同的输出,那么测试用例永远不会失败。 – Kamini
不,你不是在嘲笑响应,只告诉Mockito在测试时实际调用方法。 – SKaul