From 3795495fc6fc221244eac9175e59b0e2fcda2e18 Mon Sep 17 00:00:00 2001
From: Diman <653610@mail.ru>
Date: Thu, 9 Apr 2026 20:18:34 +0500
Subject: [PATCH] add unit tests for core classes and configure jacoco coverage
---
.gitignore | Bin 0 -> 36 bytes
pom.xml | 75 ++++++++++-
src/main/java/praktikum/Database.java | 70 +++++------
src/main/java/praktikum/Praktikum.java | 74 +++++------
src/test/java/praktikum/BunTest.java | 41 ++++++
src/test/java/praktikum/BurgerTest.java | 117 ++++++++++++++++++
src/test/java/praktikum/IngredientTest.java | 50 ++++++++
.../java/praktikum/IngredientTypeTest.java | 18 +++
8 files changed, 369 insertions(+), 76 deletions(-)
create mode 100644 .gitignore
create mode 100644 src/test/java/praktikum/BunTest.java
create mode 100644 src/test/java/praktikum/BurgerTest.java
create mode 100644 src/test/java/praktikum/IngredientTest.java
create mode 100644 src/test/java/praktikum/IngredientTypeTest.java
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..6a344d060a5ae7f024f8b2c8449c6d217febed02
GIT binary patch
literal 36
jcmezWPmdv!A%!88A(26!ftP`cp#;b(Vn_#ylt4uQqaFs*
literal 0
HcmV?d00001
diff --git a/pom.xml b/pom.xml
index 184bdae890..b9f4dc7ff0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,16 +1,83 @@
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
4.0.0
- org.example
- praktikum
+ praktikum
+ Task_1
1.0-SNAPSHOT
11
11
+ UTF-8
-
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+
+ org.mockito
+ mockito-core
+ 5.12.0
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+ 11
+ 11
+ UTF-8
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.2.5
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.11
+
+
+ prepare-agent
+
+ prepare-agent
+
+
+
+ report
+ verify
+
+ report
+
+
+
+
+
+ praktikum/Database*
+ praktikum/Praktikum*
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/praktikum/Database.java b/src/main/java/praktikum/Database.java
index a7cb7e4585..576bb8f600 100644
--- a/src/main/java/praktikum/Database.java
+++ b/src/main/java/praktikum/Database.java
@@ -1,36 +1,36 @@
-package praktikum;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Класс с методами по работе с базой данных.
- */
-public class Database {
-
- private final List buns = new ArrayList<>();
- private final List ingredients = new ArrayList<>();
-
- public Database() {
- buns.add(new Bun("black bun", 100));
- buns.add(new Bun("white bun", 200));
- buns.add(new Bun("red bun", 300));
-
- ingredients.add(new Ingredient(IngredientType.SAUCE, "hot sauce", 100));
- ingredients.add(new Ingredient(IngredientType.SAUCE, "sour cream", 200));
- ingredients.add(new Ingredient(IngredientType.SAUCE, "chili sauce", 300));
-
- ingredients.add(new Ingredient(IngredientType.FILLING, "cutlet", 100));
- ingredients.add(new Ingredient(IngredientType.FILLING, "dinosaur", 200));
- ingredients.add(new Ingredient(IngredientType.FILLING, "sausage", 300));
- }
-
- public List availableBuns() {
- return buns;
- }
-
- public List availableIngredients() {
- return ingredients;
- }
-
+package praktikum;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Класс с методами по работе с базой данных.
+ */
+public class Database {
+
+ private final List buns = new ArrayList<>();
+ private final List ingredients = new ArrayList<>();
+
+ public Database() {
+ buns.add(new Bun("black bun", 100));
+ buns.add(new Bun("white bun", 200));
+ buns.add(new Bun("red bun", 300));
+
+ ingredients.add(new Ingredient(IngredientType.SAUCE, "hot sauce", 100));
+ ingredients.add(new Ingredient(IngredientType.SAUCE, "sour cream", 200));
+ ingredients.add(new Ingredient(IngredientType.SAUCE, "chili sauce", 300));
+
+ ingredients.add(new Ingredient(IngredientType.FILLING, "cutlet", 100));
+ ingredients.add(new Ingredient(IngredientType.FILLING, "dinosaur", 200));
+ ingredients.add(new Ingredient(IngredientType.FILLING, "sausage", 300));
+ }
+
+ public List availableBuns() {
+ return buns;
+ }
+
+ public List availableIngredients() {
+ return ingredients;
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/praktikum/Praktikum.java b/src/main/java/praktikum/Praktikum.java
index ce661ccf36..745d26fdd4 100644
--- a/src/main/java/praktikum/Praktikum.java
+++ b/src/main/java/praktikum/Praktikum.java
@@ -1,38 +1,38 @@
-package praktikum;
-
-import java.util.List;
-
-public class Praktikum {
-
- public static void main(String[] args) {
- // Инициализируем базу данных
- Database database = new Database();
-
- // Создадим новый бургер
- Burger burger = new Burger();
-
- // Считаем список доступных булок из базы данных
- List buns = database.availableBuns();
-
- // Считаем список доступных ингредиентов из базы данных
- List ingredients = database.availableIngredients();
-
- // Соберём бургер
- burger.setBuns(buns.get(0));
-
- burger.addIngredient(ingredients.get(1));
- burger.addIngredient(ingredients.get(4));
- burger.addIngredient(ingredients.get(3));
- burger.addIngredient(ingredients.get(5));
-
- // Переместим слой с ингредиентом
- burger.moveIngredient(2, 1);
-
- // Удалим ингредиент
- burger.removeIngredient(3);
-
- // Распечатаем рецепт бургера
- System.out.println(burger.getReceipt());
- }
-
+package praktikum;
+
+import java.util.List;
+
+public class Praktikum {
+
+ public static void main(String[] args) {
+ // Инициализируем базу данных
+ Database database = new Database();
+
+ // Создадим новый бургер
+ Burger burger = new Burger();
+
+ // Считаем список доступных булок из базы данных
+ List buns = database.availableBuns();
+
+ // Считаем список доступных ингредиентов из базы данных
+ List ingredients = database.availableIngredients();
+
+ // Соберём бургер
+ burger.setBuns(buns.get(0));
+
+ burger.addIngredient(ingredients.get(1));
+ burger.addIngredient(ingredients.get(4));
+ burger.addIngredient(ingredients.get(3));
+ burger.addIngredient(ingredients.get(5));
+
+ // Переместим слой с ингредиентом
+ burger.moveIngredient(2, 1);
+
+ // Удалим ингредиент
+ burger.removeIngredient(3);
+
+ // Распечатаем рецепт бургера
+ System.out.println(burger.getReceipt());
+ }
+
}
\ No newline at end of file
diff --git a/src/test/java/praktikum/BunTest.java b/src/test/java/praktikum/BunTest.java
new file mode 100644
index 0000000000..80a2a00d54
--- /dev/null
+++ b/src/test/java/praktikum/BunTest.java
@@ -0,0 +1,41 @@
+package praktikum;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(Parameterized.class)
+public class BunTest {
+
+ private final String name;
+ private final float price;
+
+ public BunTest(String name, float price) {
+ this.name = name;
+ this.price = price;
+ }
+
+ @Parameterized.Parameters
+ public static Object[][] getBunData() {
+ return new Object[][]{
+ {"black bun", 100f},
+ {"white bun", 200f}
+ };
+ }
+
+ @Test
+ public void getNameShouldReturnCorrectName() {
+ Bun bun = new Bun(name, price);
+
+ assertEquals(name, bun.getName());
+ }
+
+ @Test
+ public void getPriceShouldReturnCorrectPrice() {
+ Bun bun = new Bun(name, price);
+
+ assertEquals(price, bun.getPrice(), 0);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/praktikum/BurgerTest.java b/src/test/java/praktikum/BurgerTest.java
new file mode 100644
index 0000000000..f532828a47
--- /dev/null
+++ b/src/test/java/praktikum/BurgerTest.java
@@ -0,0 +1,117 @@
+package praktikum;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class BurgerTest {
+
+ private Burger burger;
+
+ @Mock
+ private Ingredient mockedIngredient;
+
+ @Before
+ public void setUp() {
+ burger = new Burger();
+ }
+
+ @Test
+ public void setBunsShouldSetBun() {
+ Bun bun = new Bun("black bun", 100f);
+ burger.setBuns(bun);
+ assertSame(bun, burger.bun);
+ }
+
+ @Test
+ public void addIngredientShouldAddIngredientToList() {
+ burger.addIngredient(mockedIngredient);
+ assertEquals(1, burger.ingredients.size());
+ assertSame(mockedIngredient, burger.ingredients.get(0));
+ }
+
+ @Test
+ public void removeIngredientShouldRemoveIngredientFromList() {
+ Ingredient first = new Ingredient(IngredientType.SAUCE, "sauce", 50f);
+ Ingredient second = new Ingredient(IngredientType.FILLING, "meat", 100f);
+
+ burger.addIngredient(first);
+ burger.addIngredient(second);
+ burger.removeIngredient(0);
+
+ assertEquals(1, burger.ingredients.size());
+ assertSame(second, burger.ingredients.get(0));
+ }
+
+ @Test
+ public void moveIngredientShouldMoveIngredientToNewIndex() {
+ Ingredient first = new Ingredient(IngredientType.SAUCE, "sauce", 50f);
+ Ingredient second = new Ingredient(IngredientType.FILLING, "meat", 100f);
+
+ burger.addIngredient(first);
+ burger.addIngredient(second);
+ burger.moveIngredient(0, 1);
+
+ assertSame(second, burger.ingredients.get(0));
+ assertSame(first, burger.ingredients.get(1));
+ }
+
+ @Test
+ public void getPriceShouldReturnCorrectPriceWithMock() {
+ Bun bun = new Bun("bun", 100f);
+ burger.setBuns(bun);
+ burger.addIngredient(mockedIngredient);
+
+ when(mockedIngredient.getPrice()).thenReturn(50f);
+
+ assertEquals(250f, burger.getPrice(), 0);
+ }
+
+ @Test
+ public void getPriceShouldReturnCorrectPriceWithoutIngredients() {
+ burger.setBuns(new Bun("bun", 100f));
+ assertEquals(200f, burger.getPrice(), 0);
+ }
+
+ @Test
+ public void getPriceShouldReturnCorrectPriceWithSeveralIngredients() {
+ burger.setBuns(new Bun("bun", 100f));
+ burger.addIngredient(new Ingredient(IngredientType.SAUCE, "sauce", 50f));
+ burger.addIngredient(new Ingredient(IngredientType.FILLING, "meat", 150f));
+
+ assertEquals(400f, burger.getPrice(), 0);
+ }
+
+ @Test
+ public void getReceiptShouldReturnCorrectReceipt() {
+ Bun bun = new Bun("bun", 100f);
+
+ burger.setBuns(bun);
+ burger.addIngredient(mockedIngredient);
+
+ when(mockedIngredient.getType()).thenReturn(IngredientType.SAUCE);
+ when(mockedIngredient.getName()).thenReturn("sauce");
+ when(mockedIngredient.getPrice()).thenReturn(50f);
+
+ String expected = String.format(
+ "(==== %s ====)%n" +
+ "= %s %s =%n" +
+ "(==== %s ====)%n" +
+ "%nPrice: %f%n",
+ "bun",
+ "sauce",
+ "sauce",
+ "bun",
+ 250f
+ );
+
+ assertEquals(expected, burger.getReceipt());
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/praktikum/IngredientTest.java b/src/test/java/praktikum/IngredientTest.java
new file mode 100644
index 0000000000..44385b947a
--- /dev/null
+++ b/src/test/java/praktikum/IngredientTest.java
@@ -0,0 +1,50 @@
+package praktikum;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(Parameterized.class)
+public class IngredientTest {
+
+ private final IngredientType type;
+ private final String name;
+ private final float price;
+
+ public IngredientTest(IngredientType type, String name, float price) {
+ this.type = type;
+ this.name = name;
+ this.price = price;
+ }
+
+ @Parameterized.Parameters
+ public static Object[][] getIngredientData() {
+ return new Object[][]{
+ {IngredientType.SAUCE, "hot sauce", 100f},
+ {IngredientType.FILLING, "cutlet", 300f}
+ };
+ }
+
+ @Test
+ public void getTypeShouldReturnCorrectType() {
+ Ingredient ingredient = new Ingredient(type, name, price);
+
+ assertEquals(type, ingredient.getType());
+ }
+
+ @Test
+ public void getNameShouldReturnCorrectName() {
+ Ingredient ingredient = new Ingredient(type, name, price);
+
+ assertEquals(name, ingredient.getName());
+ }
+
+ @Test
+ public void getPriceShouldReturnCorrectPrice() {
+ Ingredient ingredient = new Ingredient(type, name, price);
+
+ assertEquals(price, ingredient.getPrice(), 0);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/praktikum/IngredientTypeTest.java b/src/test/java/praktikum/IngredientTypeTest.java
new file mode 100644
index 0000000000..c2b295a0ab
--- /dev/null
+++ b/src/test/java/praktikum/IngredientTypeTest.java
@@ -0,0 +1,18 @@
+package praktikum;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class IngredientTypeTest {
+
+ @Test
+ public void ingredientTypeShouldContainSauce() {
+ assertEquals("SAUCE", IngredientType.SAUCE.name());
+ }
+
+ @Test
+ public void ingredientTypeShouldContainFilling() {
+ assertEquals("FILLING", IngredientType.FILLING.name());
+ }
+}
\ No newline at end of file