Метод "готовки" Повара, добавляет новый объект типа "Еда" в общий список
* @param foodArrayList список еды
* @param ItemName название блюда
*/
void cook(ArrayList<Food> foodArrayList, String ItemName) {
Random rand = new Random();
int r = rand.nextInt(4);
Taste t = null;
switch (r)
{
case 0: t = Taste.SWEET; break;
case 1: t = Taste.SOUR; break;
case 2: t = Taste.SALTY; break;
case 3: t = Taste.BITTER; break;
}
Food f = new Food(t, ItemName);
foodArrayList.add(foodArrayList.size(), f);
}
Пример
public enum Taste {
SOUR(0),
SALTY(1),
BITTER(2),
SWEET(3),
UNKNOW(-1);
private final int code;
Taste(int code) {
this.code = code;
}
public static Taste get(int code) {
for (Taste value : values()) {
if (value.code == code) {
return value;
}
}
return UNKNOW;
}
public static int size() {
return values().length;
}
}
public class Food {
private final Taste taste;
private final String name;
public Food(Taste t, String itemName) {
this.taste = t;
this.name = itemName;
}
public Taste getTaste() {
return taste;
}
public String getName() {
return name;
}
}
public class A {
private List<Food> list;
public boolean addCook(String name) {
return getList().add(getRandomFood(name));
}
protected List<Food> getList() {
if (list == null) {
list = new ArrayList<>();
}
return list;
}
protected Food getRandomFood(String name) {
return new Food(Taste.get(randomValue()), name);
}
protected int randomValue() {
Random rand = new Random();
return rand.nextInt(Taste.size());
}
}
пример теста
@Test
public void testAddCook() {
/* prepare */
A testingClass = mock(A.class, withSettings().defaultAnswer(CALLS_REAL_METHODS));
List<Food> list = spy(ArrayList.class);
String name = "name";
Taste bitter = Taste.BITTER;
Food food = new Food(bitter, name);
doReturn(list).when(testingClass).getList();
doReturn(food).when(testingClass).getRandomFood(anyString());
/* action */
boolean actual = testingClass.addCook(name);
/* assert */
Assert.assertTrue(actual);
Assert.assertEquals(list.size(), 1);
Food expected = list.get(0);
Assert.assertEquals(food, expected);
Assert.assertEquals(bitter, expected.getTaste());
Assert.assertEquals(name, expected.getName());
verify(testingClass).getList();
verify(list).add(food);
verify(testingClass).getRandomFood(name);
}
Я бы немного изменил твой код. В частности, вынес бы генерацию случайного вкуса в отдельный (приватный) метод.
public class Cook {
public void cook(List<Food> foods, String title) {
Food f = new Food(randomTaste(), title);
foods.add(foods.size(), f);
}
private Taste randomTaste() {
Random rand = new Random();
int r = rand.nextInt(4);
Taste t = null;
switch (r)
{
case 0: t = Taste.SWEET; break;
case 1: t = Taste.SOUR; break;
case 2: t = Taste.SALTY; break;
case 3: t = Taste.BITTER; break;
}
return t;
}
}
public class Food {
private String title;
private Taste taste;
public Food(Taste taste, String title) {
this.title = title;
this.taste = taste;
}
public String getTitle() { return title; }
public Taste getTaste() { return taste; }
public void setTitle(String title) { this.title = title; }
public void setTaste(Taste taste) { this.taste = taste; }
}
public enum Taste {
SWEET,
SOUR,
SALTY,
BITTER
}
Ну и сам тест
public class CookTest {
private Cook cook;
private List<Food> foods;
@Before
public void prepareData(){
cook = new Cook();
foods = new ArrayList<>();
cook.cook(foods, "food_1");
}
@Test
public void foodsListIncreacedSize_test() {
assertTrue(foods.size() == 1);
}
@Test
public void foodsListContainFoodWithSameTitle_test() {
assertTrue(foods.get(0).getTitle().equals("food_1"));
}
@Test
public void foodsListContainFoodWithDifferentTaste_test() {
for (int i=2; i < 11; i++)
cook.cook(foods, "food_"+i);
assertTrue(foods.removeIf(food -> food.getTaste()==Taste.BITTER));
assertTrue(foods.removeIf(food -> food.getTaste()==Taste.SALTY));
assertTrue(foods.removeIf(food -> food.getTaste()==Taste.SOUR));
assertTrue(foods.removeIf(food -> food.getTaste()==Taste.SWEET));
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Помогите советомприложение в ActionBar выводиться иконка с "Блутусом" При запуске приложение проверяет включен ли блютус или нет если включен...
Мне необходимо хранить, обновлять и отдавать по запросу некоторые элементы графаПод графом в данном случае я подразумеваю его представление...
Бывают ли такие случаи, когда нужно прописывать и работать напрямую с итератором а не в foreach?