Cześć, ogarniam właśnie buildera i mam taki problem, że nie chce mi pobierać zmiennych z enuma na testach, gdy typem danych w klasie Bigmac
jest właśnie enum... Jak zamiast enuma był String
i int
to wszystko działało. Moje pytanie co zrobić, żeby testy ruszyły i żeby zamiast Stringów i intów były właśnie enumy?
Klasa Bigmac:
import java.util.ArrayList;
import java.util.List;
public class Bigmac {
private final BurgerBun bun;
private final Burgers burgers;
private final BurgerSauce sauce;
private List<BurgerIngredients> ingredients;
public static class BigmacBuilder {
private BurgerBun bun;
private Burgers burgers;
private BurgerSauce sauce;
private List<BurgerIngredients> ingredients = new ArrayList<>();
public BigmacBuilder bun(BurgerBun bun) {
this.bun = bun;
return this;
}
public BigmacBuilder burgers(Burgers burgers) {
this.burgers = burgers;
return this;
}
public BigmacBuilder sauce(BurgerSauce sauce) {
this.sauce = sauce;
return this;
}
public BigmacBuilder ingredients(BurgerIngredients ingredient) {
ingredients.add(ingredient);
return this;
}
public Bigmac build() {
return new Bigmac(bun, burgers, sauce, ingredients);
}
}
private Bigmac(BurgerBun bun, Burgers burgers, BurgerSauce sauce, List<BurgerIngredients> ingredients) {
this.bun = bun;
this.burgers = burgers;
this.sauce = sauce;
this.ingredients = ingredients;
}
public BurgerBun getBun() {
return bun;
}
public Burgers getBurgers() {
return burgers;
}
public BurgerSauce getSauce() {
return sauce;
}
public List<BurgerIngredients> getIngredients() {
return ingredients;
}
@Override
public String toString() {
return "Bigmac{" +
"bun='" + bun + '\'' +
", burgers=" + burgers +
", sauce='" + sauce + '\'' +
", ingredients=" + ingredients +
'}';
}
}
Klasa testowa:
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class BigmacTestSuite {
@Test
void individualBigmacTest() {
//Given
Bigmac bigmac = new Bigmac.BigmacBuilder()
/*
.bun(BurgerBun.BUN_SESAME.getBun())
.burgers(Burgers.BURGERS_TWO.getBurgers())
.sauce(BurgerSauce.SAUCE_STANDARD.getSauce())
.ingredients(BurgerIngredients.INGREDIENT_BACON.getIngredient())
.ingredients(BurgerIngredients.INGREDIENT_LETTUCE.getIngredient())
.ingredients(BurgerIngredients.INGREDIENT_TOMATO.getIngredient())
*/
.bun(BurgerBun.BUN_SESAME)
.burgers(Burgers.BURGERS_TWO)
.sauce(BurgerSauce.SAUCE_STANDARD)
.ingredients(BurgerIngredients.INGREDIENT_BACON)
.ingredients(BurgerIngredients.INGREDIENT_LETTUCE)
.ingredients(BurgerIngredients.INGREDIENT_TOMATO)
.build();
System.out.println(bigmac);
//When
int howManyIngredients = bigmac.getIngredients().size();
Burgers howManyBurgers = bigmac.getBurgers();
BurgerSauce whatSauce = bigmac.getSauce();
BurgerIngredients firstIngredient = bigmac.getIngredients().get(0);
//Then
Assertions.assertAll(
() -> Assertions.assertEquals(3, howManyIngredients),
() -> Assertions.assertEquals(2, howManyBurgers),
() -> Assertions.assertEquals("standard sauce", whatSauce),
() -> Assertions.assertEquals("bacon", firstIngredient)
);
}
}
I przykładowy jeden enum:
public enum BurgerIngredients {
INGREDIENT_TOMATO("tomato"),
INGREDIENT_BACON("bacon"),
INGREDIENT_LETTUCE("lettuce"),
INGREDIENT_CHEESE("cheese");
private String ingredient;
BurgerIngredients(String ingredient) {
this.ingredient = ingredient;
}
public String getIngredient() {
return ingredient;
}
}