Печать структуры в формате, подходящем для копирования / вставки в тесты, в качестве значения wantResult - PullRequest
1 голос
/ 30 октября 2019

Мне нужно написать тесты для функции, в которой возвращаемый результат представляет собой фрагмент больших структур. Это означает, что вам нужно написать тест, в котором «wantResult» должен быть заполнен всеми этими структурами. Самый быстрый способ ее заполнения - вызвать функцию и скопировать / вставить результат в тест. Однако я обнаружил, что нелегко напечатать структуру в подходящем формате, где вы можете просто скопировать / вставить ее.

fmt.Printf("%v",myStruct)

напечатает что-то вроде этого: [{field A field B field C} {field A field B field C}] т.е. без кавычек для строк, без запятых между полями.

fmt.Printf("%+v",myStruct)

напечатает что-то вроде этого: [{field A:value A field B:value B field C:value C} {field A:value A field B:value B field C:value C}] - также без кавычек, без запятых между полями.

Наконец, я придумаю решение для отражения, которое выглядит следующим образом:

for _, oneStruct := range gotResult {
                s := reflect.ValueOf(&oneStruct).Elem()
    typeOfs := s.Type()
    fmt.Println("{")
    for i := 0; i < s.NumField(); i++ {
        f := s.Field(i)
        switch f.Type().Name() {
        case "string":
                        fmt.Printf("%v:\"%v\",\n", typeOfs.Field(i).Name, f.Interface())
        default :
                        fmt.Printf("%v:%v,\n", typeOfs.Field(i).Name, f.Interface())
        }
    }
    fmt.Println("},")
}

Оно отлично работает для простых плоских структур с типами полей int, float и string. Тем не менее, это выглядит громоздко. Кто-нибудь знает что-нибудь более элегантное для этой цели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...