java - 我应该如何定义一个返回数组的集合方法?
问题描述
我想知道我应该怎么做才能正确返回数组列表。目前我在测试方法的每一行都收到此错误,其中get(o),get(1)等:找不到符号符号:方法get(int)位置:接口集合
见这里: 错误图片
我还尝试了其他方法,例如 assertThat 不起作用。
我有一个看起来像这样的测试方法:
@Test
public void testSaveCar() {
dao.saveCar(car3);
assertEquals(dao.getCars().get(0), car1.getCarId());
assertEquals(dao.getCars().get(1).getCarId(), car2.getCarId());
assertEquals(dao.getCars().get(2).getCarId(), car3.getCarId());
dao.removeCar(car3);
}
和一个看起来像这样的 jdbcdao 类:
/**
*
*
*/
public class CarJdbcDAO implements CarDAO {
private String url = JdbcConnection.getDefaultConnectionUri();
public CarJdbcDAO() {
}
public CarJdbcDAO(String uri) {
this.url = uri;
}
@Override
public Collection<Car> getCars() {
String sql = "select * from Car";
try (
Connection dbCon = JdbcConnection.getConnection(url); //get connection to db
PreparedStatement stmt = dbCon.prepareStatement(sql); //create stmt
) {
ResultSet rs = stmt.executeQuery();
List<Car> carsList = new ArrayList<>();
//iterate through query results
while (rs.next()) {
String carId = rs.getString("Car_Id");
String carName = rs.getString("Car_Name");
String carType = rs.getString("Car_Type");
String seatNumber = rs.getString("Seat_Number");
BigDecimal hourlyCharge = rs.getBigDecimal("Hourly_Charge");
String location = rs.getString("Location");
Car car = new Car(carId, carName, carType, seatNumber, hourlyCharge, location);
carsList.add(car);
}
return carsList;
} catch (SQLException ex) {
throw new DAOException(ex.getMessage(), ex);
}
}
解决方案
getCars
返回Collection
与列表不同的 a。具体来说,它不允许您使用索引获取项目。
断言集合包含某些项目的更好方法是使用:
assertThat(dao.getCars(), hasItems(car1, car2));
这是使用通常与 junit 一起使用的 Hamcrest 断言库。您可以使用其他断言库,例如 AssertJ,它允许:
assertThat(dao.getCars()).containsExactly(car1, car2);
如果您没有equals
定义,AssertJ 还允许您提取字段:
assertThat(dao.getCars()).extracting("id").contains(id1, id2);
推荐阅读
- database - 将字符串更改为日期格式
- python - pygame主游戏功能在if语句后冻结
- html - Fontawesome 不起作用,图标不显示
- html - CSS用许多相同的孩子完全填充容器
- regex - 正则表达式:在右侧第三个逗号的左侧插入双引号
- docker - 为什么 GitLab CI/CD 因多阶段 Dockerfile 而失败?
- html - 初学者坚持制作有效的 html 和 css 测验的任务
- servlets - web.xml中的/和/*有什么区别
- postgresql - docker pgadmin 中的 CSRF 令牌丢失错误
- php - 如何调试 PHP 错误“解析错误:语法错误,意外的 T_CLASS”