Добавление к объекту ArrayList из другого класса - PullRequest
0 голосов
/ 29 января 2019

У меня есть класс с именем 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 голосов
/ 29 января 2019

Я хочу добавить к Stock, а не ItemRegister, потому что, если позже я захочу проконсультироваться 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);
    }
}
0 голосов
/ 29 января 2019

Из комментариев вы можете изменить отношения родитель-потомок и создать 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.

...