我是使用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