Мне нужно написать тесты для этой функции:
func Parse(f *multipart.Form) ([]Person, error)
Важно отметить, что multipart.Form.Value — это не просто ключ:значение, это более сложный json, простой пример:
[
{
"value": {
"person_name__0": "Mike",
"person_name__1": "John"
},
"question": {
"id": 52681363,
"slug": "person_name"
}
},
{
"value": {
"created_date__0": "2024-06-26",
"created_date__1": "2024-06-24"
},
"question": {
"id": 52681362,
"slug": "created_date"
}
},
{
"value": "Germany",
"question": {
"id": 52681360,
"slug": "country"
}
}
]
Каков наилучший способ проверить эту функцию? Должен ли я создавать файлы json (или просто строки json в коде) вручную, создавать из них объекты multipart.Form или создавать такие файлы автоматически (я считаю, что это сложно)? Или я могу как-то создавать макеты объектов? Но как я могу создать макетные объекты multipart.Form, которые будут иметь одинаковую структуру .Value (я имею в виду ту же структуру json, как в моем примере)?
Это моя первая попытка что-то протестировать, может быть есть глупые вопросы, но я надеюсь, что вы подскажете мне, что не так, и поможете =)
@Cerise Limón Должен ли я писать jsons вручную? (Я имею в виду написать, например, 10 json-строчек вручную и использовать их) Или будет лучше, если я буду создавать их автоматически?
@Markus W Mahlberg Я просто хочу понять, какой идеальный способ протестировать эту функцию. Мое идеальное решение — каким-то образом сгенерировать (автоматически) множество json-файлов и использовать их.





Используйте текст. Будь проще.
func TestExample(t *testing.T) {
data := `--XXX
Content-Disposition: form-data; name = "text"
a text value
--XXX
Content-Disposition: form-data; name = "file"; filename = "a.txt"
Content-Type: text/json
[
{
"value": {
"person_name__0": "Mike",
"person_name__1": "John"
},
"question": {
"id": 52681363,
"slug": "person_name"
}
},
{
"value": {
"created_date__0": "2024-06-26",
"created_date__1": "2024-06-24"
},
"question": {
"id": 52681362,
"slug": "created_date"
}
},
{
"value": "Germany",
"question": {
"id": 52681360,
"slug": "country"
}
}
]
--XXX--`
form, err := multipart.NewReader(strings.NewReader(data), "XXX").ReadForm(1024 * 1024)
if err != nil {
t.Fatal(err)
}
people, err := Parse(form)
// Check for expected values here.
}
Каков будет ваш подход? Что вы пробовали до сих пор? Как вы себе представляете идеальное решение?