[英]Java Mockito JUnit Test / Mock Class with a constructor that contains a abstract Method call
[英]How to deal with test class who is having dependency on abstract method using junit mockito in java
我是使用Java中的Mockito進行junit測試的新手。 我被困在某一點上。 我有一個抽象類AbstractA需要測試。 實現AbstractA如下。
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();
請幫助我了解上述情況下我該怎么做。
運行doCallRealMethod()。when(abstractA).getColumns(); 在單元測試中
您不需要測試抽象類tdd對抽象類一無所知,使其成為普通類,只有兩個或多個類具有相同的代碼重復,才能將其提升為抽象,對該類的測試不會改變。 將sql查詢字符串和IPRowMapper指定為構造函數參數,這可以簡化代碼並使代碼更簡潔。 其次,您不需要為測試進行如此復雜的設置,只需要驗證交互,不返回值,僅驗證NamedParameterJdbcTemplate
模擬,以及傳遞給它的值是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.