@Oblomov95

Как правильно писать Unit тесты для http запросов(Go)?

Всем привет, учусь писать юнит-тесты, не совсем могу понять, как можно написать тест для http запросов.
Допустим есть такая функция, которая берёт XML(yml) файл из сети по url.
func (y *Yml) LoadXMLFromURL(url string) error {
	response, err := http.Get(url)
	if err != nil {
		return err
	}
	answer, err := ioutil.ReadAll(response.Body)
	if err != nil {
		return err
	}
	err = xml.Unmarshal(answer, y)
	return err
}


И я не совсем могу понять, как в тестировании этой функции использовать XML из сети, что если url с этим XML будет не доступен, тест же просто выдаст ошибку.
Я думал, что можно просто записать XML в переменную и использовать её, верно ли я мыслю?
  • Вопрос задан
  • 589 просмотров
Пригласить эксперта
Ответы на вопрос 1
@DmitriyTitov
В таких случаях нужно разделить сложносоставную функцию на части. Что я имею в виду? Предположим, что ваша функция запрашивает данные из сети или читает с диска и потом их обрабатывает. В этом случае написать надёжный автотест не получится. Ведь сеть и диск - это всегда неопределённость. Поэтому следует разделить функцию на две - получение данных и обработка данных. В этом случае обработку данных легко тетировать передав в тест специально подготовленные данные. А функцию получения данных уже можно тестировать либо на эмуляторе источника (БД в памяти, тестовый сервер, специальные файлы и т.д.) либо вообще на заглушке. А может даже и на реальных источниках данных - всё зависит. При этом формально у вас будут и юнит-тесты и интеграционные тесты при использовании в тестах внешних компонент.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы