Problem z builderem i Enum jako typ danych.

0

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;
    }
}
0

Czemu nie dasz BurgerIngredients.INGREDIENT_BACON zamiast "bacon" (chyba od tego są enumy)? Albo zrób firstIngredient.getIngredient()

0

Czemu nie dasz BurgerIngredients.INGREDIENT_BACON zamiast "bacon" (chyba od tego są enumy)?

@randomowy: Raczej nie o to chodziło mojemu mentorowi. Zrobiłem z tym firstIngredient.getIngredient() i wynik jest taki: BigMac{bun='BUN_SESAME', burgers=BURGERS_TWO, sauce='SAUCE_STANDARD', ingredients=[INGREDIENT_BACON, INGREDIENT_LETTUCE, INGREDIENT_TOMATO]} a mi chodzi o to, żeby pomimo zastosowania enumów jako typ danych wynik z konsoli był taki: BigMac{bun='bun with sesame seeds', burgers=2, sauce='standard sauce', ingredients=[bacon, lettuce, tomato]}

0

To musisz odpowiednio nadpisać metodę toString()

0

@Skoq: W enumach?

Edit: ok, chyba mam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1