从另一个类添加到对象ArrayList

时间:2019-01-29 00:35:27

标签: java arraylist junit4

我有一个名为Item的类。

public class Item {

private int code;
private String name;
private double price;
private int quantity;

public Item(int code, String name, double price, int quantity) {
    setCode(code);
    setName(name);
    setPrice(price);
    setQuantity(quantity);
}
//Item getters and setters

我有一个名为Stock的类,它创建了一个ArrayList。

public class Stock {
private ArrayList<Item> stock;

public Stock() {
    stock = new ArrayList<Item>();
}

public ArrayList<Item> getStock() {
    return stock;
}

我还有一个名为ItemRegister的类,可以将商品添加到库存中。

public class ItemRegister extends Stock {

public void registerItem(String name, double price) {
    getStock().add(new Item(setItemCode(), name, price, 0));
}

private int setItemCode() {
    return getStock().size() + 1;
}

我正在使用单元测试来查看是否确实向库存添加了商品。

public class ItemRegisterTest {

@Test
public void testIfHasRegisteredItemInStock() {
    Stock s = new Stock();
    assertTrue(s.getStock().size() == 0);
    ItemRegister i = new ItemRegister();        
    i.registerItem("Oleo", 20.0);
    assertTrue(s.getStock().size() == 1);
}

}

运行这些测试时,它返回错误。 在第二个assertTrue上,如果我对对象i进行测试,它将返回true,但是我想要的是添加到Stock而不是ItemRegister中,因为稍后想咨询Stock,我打给Stock而不是ItemRegister

2 个答案:

答案 0 :(得分:1)

从注释中,您可以做的是更改父子关系并让ItemRegister保留Stock对象的实例。因此,您可以像这样修改ItemRegister类:

public class ItemRegister  {
    Stock s;
    public ItemRegister(Stock s) {
        this.s = s;
    }

    public void registerItem(String name, double price) {
        s.getStock().add(new Item(setItemCode(), name, price, 0));
    }

    private int setItemCode() {
        return s.getStock().size() + 1;
    }
}

然后,您最初编写的测试代码将经过修改ItemRegister i = new ItemRegister(s);后变为正确,并且您可以处理一个Stock对象实例。

答案 1 :(得分:0)

  

我要添加到Stock而不是ItemRegister,因为如果以后我想咨询Stock,我会叫Stock,而不是ItemRegister

然后,您需要将Stock包装到ItemRegister中。

public class ItemRegister  {
    Stock stock;
    public ItemRegister(Stock stock) {
        this.stock = stock;
    }

    public void registerItem(String name, double price) {
        stock.getStock().add(new Item(setItemCode(), name, price, 0));
    }

    private int setItemCode() {
        return stock.getStock().size() + 1;
    }
}

在您的单元测试中使用它,如下所示:

public class ItemRegisterTest {
    @Test
    public void testIfHasRegisteredItemInStock() {
        Stock s = new Stock();
        assertTrue(s.getStock().size() == 0);
        ItemRegister i = new ItemRegister(s);        
        i.registerItem("Oleo", 20.0);
        assertTrue(s.getStock().size() == 1);
    }
}