我有一个名为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
。
答案 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);
}
}