Тестирование констант в Go
В Go константы — ценный инструмент для обеспечения согласованности и корректности кода. Однако когда дело доходит до модульного тестирования, использование констант может создать проблемы. В этой статье рассказывается, как переопределить константы специально для целей тестирования в Go.
Задача с константами
Константы в Go — это неизменяемые значения, которые нельзя изменить во время выполнения программы. Эта неизменяемость обеспечивает целостность состояния программы и предотвращает случайные изменения. Однако во время тестирования может возникнуть необходимость временно изменить константы для тестирования конкретных сценариев.
Подход, удобный для тестирования
Рассмотрим следующий пример:
package main
const baseUrl = "http://google.com"
// in main_test.go
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
...
}))
const baseUrl = ts.URL // Error: const baseUrl already defined
В этом примере мы хотим использовать тестовый сервер вместо вызова удаленного API для тестирования. Для этого нам нужно переопределить baseUrl с помощью URL-адреса тестового сервера. Однако Go выдает ошибку, поскольку константа baseUrl уже определена.
Решение: рефакторинг для тестируемости
Чтобы упростить тестирование, мы можем немного реорганизовать код, введя дополнительная функция:
const baseUrl_ = "http://google.com"
func MyFunc() string {
// Call other function passing the const value
return myFuncImpl(baseUrl_)
}
func myFuncImpl(baseUrl string) string {
// use baseUrl
// Same implementation that was in your original MyFunc() function
}
В этом рефакторинге исходная функция MyFunc делегирует свою реализацию функции myFuncImpl, которая принимает параметр baseUrl. Это позволяет нам вызывать myFuncImpl непосредственно из тестовой функции и передавать любой желаемый базовый URL-адрес.
Безопасность производственного кода
Исходная функция MyFunc остается безопасной и не подвержена влиянию рефакторинг. Он всегда передает константу baseUrl_ в myFuncImpl, гарантируя, что рабочий код не будет иметь непредвиденного поведения из-за измененных констант.
Заключение
Этот метод позволяет разработчикам переопределять константы в целях тестирования при сохранении целостности и безопасности производственного кода. Вводя дополнительную функцию, которая обеспечивает ту же функциональность, что и оригинал, тесты могут изменять константы, не затрагивая фактическое поведение кода.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3