java - Java 断言错误
问题描述
我正在尝试 assertEquals 2 个数组列表。即使列表相同,我也会在控制台中收到错误任何想法这里出了什么问题?任何帮助,将不胜感激..
从数据库中提取数据并将其放入地图
public Map<String, List<Products>> Req1() throws SQLException {
BaseQuery bq = new BaseQuery("root", "georgespc");
List<String> columns = new ArrayList<String>();
columns.add("productCode");
columns.add("productName");
columns.add("productLine"); // 2
columns.add("productScale");
columns.add("productVendor");
columns.add("productDescription");
columns.add("quantityInStock");
columns.add("buyPrice");
columns.add("MSRP");
ArrayList<ArrayList<Object>> tableOfProducts = bq.select(columns, "products");
List<String> productLines = new ArrayList<String>();
Map<String, List<Products>> lineWithProducts = new HashMap<String, List<Products>>();
for (int i = 0; i < tableOfProducts.size(); i++) {
if (!productLines.contains(tableOfProducts.get(i).get(2))) {
productLines.add(tableOfProducts.get(i).get(2).toString());
lineWithProducts.put(tableOfProducts.get(i).get(2).toString(), new ArrayList<Products>());
}
}
for (int i = 0; i < tableOfProducts.size(); i++) {
String ID = tableOfProducts.get(i).get(0).toString();
String name = tableOfProducts.get(i).get(1).toString();
String line = tableOfProducts.get(i).get(2).toString();
String scale = tableOfProducts.get(i).get(3).toString();
String vendor = tableOfProducts.get(i).get(4).toString();
String desc = tableOfProducts.get(i).get(5).toString();
Integer quantity = (Integer) tableOfProducts.get(i).get(6);
BigDecimal price = (BigDecimal) tableOfProducts.get(i).get(7);
BigDecimal msrp = (BigDecimal) tableOfProducts.get(i).get(8);
Products p = new Products(ID, name, line, scale, vendor, desc, quantity, price, msrp);
if (!lineWithProducts.get(line).contains(p)) {
lineWithProducts.get(line).add(p);
}
}
return lineWithProducts;
}
测试班
@Test
public void test() throws SQLException {
Map<String, List<Products>> lineWithProducts = new HashMap<String, List<Products>>();
BaseQuery bq = new BaseQuery("root", "georgespc");
SetH_req1 requirements = new SetH_req1();
ResultSet rs = bq.query("select productline from productLines");
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
String columnValue = rs.getString(i);
lineWithProducts.put(columnValue, new ArrayList<Products>());
}
}
rs = bq.query(
"select productCode, productName, productline, productScale, productVendor, productDescription, quantityInStock, buyPrice, MSRP "
+ "from products where productline='motorcycles'");
rsmd = rs.getMetaData();
System.out.println("\n\n\n\n");
String line = null;
while (rs.next()) {
Products p = null;
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
String ID = rs.getString(1);
String name = rs.getString(2);
line = rs.getString(3);
String scale = rs.getString(4);
String vendor = rs.getString(5);
String desc = rs.getString(6);
Integer quantity = rs.getInt(7);
BigDecimal price = rs.getBigDecimal(8);
BigDecimal msrp = rs.getBigDecimal(9);
p = new Products(ID, name, line, scale, vendor, desc, quantity, price, msrp);
}
if (!lineWithProducts.get(line).contains(p)) {
lineWithProducts.get(line).add(p);
}
}
assertEquals(requirements.Req1().get(line).get(1), lineWithProducts.get(line).get(1));
错误
java.lang.AssertionError:预期:com.com1028.assignment.Products<
ID=S10_2016, name=1996 Moto Guzzi 1100i, productType=Motorcycles, productScale=1:10, vendor=Highway 66 Mini Classics, description=Moto Guzzi 官方标志和徽章,位于摩托车侧面的马鞍包,详细的发动机,工作转向, 工作悬架, 两个真皮座椅, 行李架, 双排气管, 位于车把上的小马鞍包, 带有镀铬装饰的双色油漆, 卓越的压铸细节, 旋转轮子, 工作脚架, 压铸金属与塑料部件和烤瓷漆,库存=6625,价格=68.99,MRSP=118.94
但是是:com.com1028.assignment.Products<
ID=S10_2016, name=1996 Moto Guzzi 1100i, productType=Motorcycles, productScale=1:10, vendor=Highway 66 Mini Classics, description=Moto Guzzi 官方标志和徽章,位于摩托车侧面的马鞍包,详细的发动机,工作转向, 工作悬架, 两个真皮座椅, 行李架, 双排气管, 位于车把上的小马鞍包, 带有镀铬装饰的双色油漆, 卓越的压铸细节, 旋转轮子, 工作脚架, 压铸金属与塑料部件和烤瓷漆,库存=6625,价格=68.99,MRSP=118.94
>
解决方案
您正在比较两个Products
对象,因此您应该确保覆盖该类的equals
方法。例如:
@Override
public boolean equals(final Object o) {
if (o == null || this.getClass() != o.getClass()) {
return false;
}
final Products products = (Products) o;
return Objects.equals(this.id, products.id) &&
Objects.equals(this.name, products.name) &&
Objects.equals(this.line, products.line) &&
Objects.equals(this.scale, products.scale) &&
Objects.equals(this.vendor, products.vendor) &&
Objects.equals(this.desc, products.desc) &&
Objects.equals(this.quantity, products.quantity) &&
Objects.equals(this.price, products.price) &&
Objects.equals(this.msrp, products.msrp);
}
当然,如果你覆盖equals
,你也应该覆盖hashCode
:
@Override
public int hashCode() {
return Objects.hash(
this.id,
this.name,
this.line,
this.scale,
this.vendor,
this.desc,
this.quantity,
this.price,
this.msrp);
}
推荐阅读
- r - 成功部署到 shinyapp.io 后打开我的闪亮应用程序时如何解决此错误?
- c# - Net Core:为所有表自动代码生成创建通用存储库接口 Id 映射
- c - 无法在第二个 ''FOR'' 上获得 ''i'' 的值
- python-3.x - 找不到 Pip3 安装的包
- apache-kafka - 如何防止 Kafka Connect JDBC 连接器从开始/最早的消息读取,而只读取最新的消息?
- java - Issue with de-serialization from json to object containing enums
- google-app-engine - 如何从 Google Cloud SDK Repo 中获取我的 SQL 数据库
- angular - Snackbar 在部署时填满整个屏幕
- oauth-2.0 - how to generate X-RapidAPI-Key without accessing https://rapidapi.com via Browser
- c# - Botskills Connect 错误:应提供参数“cs”或“ts”之一