如何处理使用Java中Junit Mockito对抽象方法依赖的测试类



我是使用Java中使用Mockito的Junit测试的新手。我被困在某一时刻。我有一个需要测试的抽象类摘要。如下所示。

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();
}

和上述测试类是abacractatest

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();

请帮助我了解我在上述情况下应该做什么。

运行docallrealmethod((。当(Abstracta(.getColumns((;在单元测试

您不需要测试抽象类 tdd 对抽象类别一无所知,使其成为正常类,并且只有两个或多个类都具有相同的代码重复将其提升为抽象,该课程的测试不会改变。将SQL查询字符串和IPROWMAPPER指定为构造函数参数,这简化了并使您的代码更加干净。其次,您不需要这样的复杂设置来进行测试,您只需验证交互,而不需要返回值,仅验证NamedParameterJdbcTemplate模拟,什么值传递给了它。

最新更新