尝试在库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字段,总是在有人引用它时,每次都赋予随机值。无法理解这是什么问题。

最佳答案

我认为答案是将切换线更改为:

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


这个想法是,除非您明确调用MockUnit,否则任何val()都不会返回任何值。

但是对我来说,你还想实现什么还不清楚?您希望最终的json看起来如何?

PS:我可能会帮助,我是MockNeat的作者。

10-04 21:04