【发布时间】:2015-11-15 23:12:38
【问题描述】:
我有一个实现另一个超类的接口测试类。在测试类中,我有一个方法应该从数组列表中更新一个对象;首先它应该检查对象是否在列表中,如果是,它将删除并添加一个新对象(替换)。如果找不到对象,它将抛出异常消息。这是我实现的代码:
public class ProductDBImpl implements ProductDB {
// field declarations
ArrayList<Product> products = new ArrayList<Product>();
@Override
public void updateProduct(Product product) throws ProductNotFoundException
{
// TODO Auto-generated method stub
Iterator<Product> pritr = products.iterator();
while(pritr.hasNext())
{
Product pr = pritr.next();
if (!pr.getId().equals(product.getId()))
{
throw new ProductNotFoundException("Product does no exist");
}
pritr.remove();
}
products.add(product);
}
首先我不知道这是否是正确的方法。而且,当我使用测试客户端脚本对其进行测试时,我收到一条错误消息:
Exception in thread "main" productdb.util.AssertionFailedError: should've gotten ProductNotFoundException
测试客户端代码如下:
ipod.setId(Integer.MAX_VALUE);
try {
productDB.updateProduct(ipod);
Assert.fail("should've gotten ProductNotFoundException");
} catch (ProductNotFoundException pnfe) {
// expecting this
}
请帮我找出我的错误。谢谢。
最新编辑 我根据收到的反馈更新了我的代码,我收到了第一个引发错误的项目:
public void updateProduct(Product product) throws ProductNotFoundException
{
// TODO Auto-generated method stub
Iterator<Product> pritr = products.iterator();
while(pritr.hasNext())
{
Product pr = pritr.next();
System.out.println(pr.getId());
System.out.println(product.getId());
if (pr.getId().equals(product.getId()))
{
pritr.remove();
}
else
{
throw new ProductNotFoundException("Product Not Found");
}
}
products.add(product);
}
另一个更新
public void updateProduct(Product product) throws ProductNotFoundException
{
// TODO Auto-generated method stub
Iterator<Product> pritr = products.iterator();
boolean match = true;
while(pritr.hasNext())
{
Product pr = pritr.next();
if (pr.getId().equals(product.getId()))
{
pritr.remove();
}
else
{
match = false;
}
}
if (match == false)
{
new ProductNotFoundException("Product not found");
}
else
{
products.add(product);
}
}
【问题讨论】:
-
您在迭代的第一步抛出异常。当所需元素是列表中的第二个或最后一个元素时,您认为会发生什么?
-
正如@LuiggiMendoza 提到的那样——你需要在头脑中或在纸上仔细检查你的代码,因为你的错误应该很明显。
-
那么我是否必须先遍历整个列表,然后将异常放在 while 循环之外?对不起,如果问题看起来很愚蠢,但我想我仍然很困惑并试图理解。
-
@DeeTee - 伙计。我不知道你为什么无视我们的建议。但请相信我,我已经编程了 40 多年,并且在这些年里教人们编程。如果你不明白你的代码在说什么,你>>需要
-
“你怎么知道我还没有尝试过?” - 我们没有,但如果你做得正确,那么你就会解决你的问题。因为那 >> 是