简单的问题,我有一个带有Items的List字段的类,我有一个在该List上运行的方法,检查是否有一个名称在参数中给出并且返回true或false的Item。我想测试该方法,在测试类中创建一个ArrayList,模拟JdbcItemDao类,并调用一个方法。测试方法无法到达阵列,如何修复?代码:
public class JdbcItemDao {
private List<Item> tempStockList;
public JdbcItemDao() {
this.tempStockList = getAllStockItems();
//getting items from my sql, returning them as ArrayList
}
public boolean checkStockItems(String itemName) {
for (Item item : tempStockList) {
if (item.getItemName().equalsIgnoreCase(itemName)) {
return true;
}
}
return false;
}}
测试类:
public class JdbcTest {
JdbcItemDao jdbcItemDao;
List<Item> tempStockList;
@Before
public void setup() {
jdbcItemDao = mock(JdbcItemDao.class);
tempStockList = new ArrayList<>();
tempStockList.add(new Item(1, "LEDTv", new BigInteger("40"),
new Integer("3"), new BigInteger("70")));
}
@Test
public void checkStockItemsName() throws Exception {
assertTrue(jdbcItemDao.checkStockItems("LEDTv"));
}}
答案 0 :(得分:0)
您使用了错误的 test double 。你需要一个 spy (它是真正实现的包装器)而不是 mock (它是一个重写被模拟类的所有方法的子类):
jdbcItemDao = spy(new JdbcItemDao());
tempStockList = new ArrayList<>();
tempStockList.add(new Item(1, "LEDTv", new BigInteger("40"),
new Integer("3"), new BigInteger("70")));
doReturn(tempStockList).when(jdbcItemDao).getAllStockItems();
关闭原因只有在您移动
时才有效this.tempStockList = getAllStockItems();
构造函数......
答案 1 :(得分:0)
有一个方法&#39; getAllStockItems&#39;,它在JdbcItemDao.java类
public List<Item> getAllStockItems() {
return jdbcTemplate.query(SELECT_ALL_STOCK_ITEMS, itemRowMapper);
}
它从MySQL数据库获取数据,这就是为什么我想在测试中使用假数组。
答案 2 :(得分:0)
如果你无法重构,我猜你的左边是创建一个私有类,重写方法并使用该类进行测试:
public class JdbcTest {
List<Item> tempStockList = new ArrayList<>();
@Before
public void setup() {
tempStockList = new ArrayList<>();
tempStockList.add(new Item(1, "LEDTv", new BigInteger("40"),
new Integer("3"), new BigInteger("70")));
}
@Test
public void checkStockItemsName() throws Exception {
JdbcItemDao jdbcItemDao = new CustomJdbcItemDao();
assertTrue(jdbcItemDao.checkStockItems("LEDTv"));
}
private class CustomJdbcItemDao extends JdbcItemDao{
@Override
public List<Item> getAllStockItems(){
return tempStockList;
}
}
}