我在产品实现中有以下代码
public void updateProduct(Product product) throws ProductNotFoundException {
Iterator<Product> it = allProducts.iterator();
Product p = null;
if (!allProducts.isEmpty()) {
while (it.hasNext()) {
p = it.next();
if (p.getId() == product.getId()) {
p.setPrice(product.getPrice());
System.out.println("Successfully updated the product "
+ product.getId());
}
}
} else {
System.out.println("No such product " + product.getId());
throw new ProductNotFoundException(product.getName());
}
}
//主要内容
ipod.setId(Integer.MAX_VALUE);
try {
productDB.updateProduct(ipod);
Assert.fail("should've gotten ProductNotFoundException");
}
catch (ProductNotFoundException pnfe) {
// expecting this
}
Junit 抛出以下异常
Exception in thread "main" productdb.util.AssertionFailedError: should've gotten ProductNotFoundException
at productdb.util.Assert.fail(Assert.java:43)
**at productdb.ProductDBClient.testProductServer(ProductDBClient.java:85)**
at productdb.ProductDBClient.main(ProductDBClient.java:20)
不幸的是,我无法使用 try 和 catch。编译器抛出错误,说它无法被捕获。
你能给我一些我做错的地方吗?
非常感谢!!
最佳答案
您忘记了当每个可用产品 p.getId() == product.getId() 为 false 时的情况。按照一般代码片段逻辑,如果没有 id 与请求匹配,您还应该抛出异常。像这样重写:
public void updateProduct(Product product) throws ProductNotFoundException {
for (Product existing : allProducts) {
if (existing.getId() == product.getId()) {
existing.setPrice(product.getPrice());
return;
}
}
System.out.println("No such product " + product.getId());
throw new ProductNotFoundException(product.getName());
}
您还可以查看一些函数式风格的库,例如 Guava,以简化对集合的操作。
关于java - 无法捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16850327/