«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как вы можете переопределить константы для целей тестирования в Go?

Как вы можете переопределить константы для целей тестирования в Go?

Опубликовано 21 ноября 2024 г.
Просматривать:490

How Can You Redefine Constants for Testing Purposes in Go?

Тестирование констант в 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