Не могу привести MockUnit к String с помощью mockneat - PullRequest
0 голосов
/ 22 ноября 2018

Попробуйте использовать мои Enum как mock с помощью библиотеки mockneat.Но проблема в том, что я не могу взять string значение из MockUnit объекта для моей правильной работы контура переключателя.

Это мой Enum:

public enum SubType {

    ROUTER("router"),
    SERVER("server"),

    private final String value;

    SubType(final String newValue) {
    value = newValue;
    }

    public String getValue() {
    return value;
    }
}

И это мой класс Build, где я пытаюсь использовать пользовательские значения из SubType:

public class Build {

private MockNeat mockNeat = MockNeat.threadLocal();
private ArrayList<String> group = new ArrayList<>();

public void addToList() {

    group.add("All Devices");
    group.add("All Groups");

    for (i = 0; i < 10; i++) {

        MockUnit subType =  mockNeat.from(SubType.class).map(SubType::getValue);

//EDITED:
//For example there are sout(subType) = "router"

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = mockNeat.reflect(Build.class)
                .field("group", constructGroupField(subType, group))
                .map(gson::toJson)
                .val();

        System.out.println(json);
    }
}

private ArrayList<String> constructGroupField(MockUnit subType, ArrayList<String> group) {

    //System.out.println(subType);
    //Output: net.andreinc.mockneat.abstraction.MockUnit$$Lambda$22/902830499@740773a3
    //But how I can get there my string like "router" or ""server"
    //How I can cast MockUnit to String value?

//EDITED:
// And there it can be already sout(subType)= "server"
    switch (subType.toString()) {

        case "router":
            group.add("All AAA");
            break;
        case "server":
            group.add("All BBB");
            break;
    }

    return group;
}

}

Основная цель состоит в том, чтобы, в зависимости от того, какая строка была в поле subtype, вывести соответствующий json файл

ОБНОВЛЕНО:

Финал Json файл, который я хочу создать:

{
    "product": "a",
    "group": "router"
}

Другая ситуация:

private String someMethod() {

        MockUnitInt localId = mockNeat.ints().range(5000, 35_000);

        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        return mockNeat.reflect(someEntity.class)
                       .field("deviceLocalID", localId.mapToString())
                       .field("localID", localId.mapToString())
                       .map(gson::toJson)
                       .val();

    }

Даже localId было полем final в классе, все время, когда что-то ссылается наэто, это дает случайное значение каждый раз.Не могу понять, что не так с этим ..

1 Ответ

0 голосов
/ 25 ноября 2018

Я думаю, что ответ заключается в том, чтобы изменить строку переключателя на:

switch (subType.val().toString())

Идея состоит в том, что любое MockUnit не возвращает никакого значения, пока вы явно не вызовете val() для него.

Но мне все еще не ясно, чего ты хочешь достичь?Как вы хотите, чтобы ваш последний JSON выглядел?

PS: Я могу помочь, я автор MockNeat.

...