>백엔드 개발 >Golang >상수 값에 의존하는 Go 코드를 테스트하는 방법은 무엇입니까?

상수 값에 의존하는 Go 코드를 테스트하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-04 07:09:31746검색

How to Test Go Code That Relies on Constant Values?

Go에서 상수 테스트

Go 프로그램을 작성할 때 흔히 겪는 어려움 중 하나는 상수 값에 의존하는 코드를 테스트하는 것입니다. 기본적으로 상수는 한 번 정의되면 재정의할 수 없으므로 테스트 중에 다양한 환경을 시뮬레이션하기가 어렵습니다.

문제 시나리오

다음 코드를 고려하세요.

<code class="go">package main

import (
    "net/http"
    "net/http/httptest"
)

const baseUrl = "http://google.com"

func main() {
    // Logic that uses baseUrl
}</code>

테스트 목적으로 baseUrl을 테스트 서버 URL로 설정하려고 합니다. 그러나 테스트 파일에서 const baseUrl을 다시 정의하면 오류가 발생합니다.

<code class="go">// in main_test.go
const baseUrl = "test_server_url" // Error: const baseUrl already defined</code>

해결책

이 제한을 극복하려면 코드를 리팩터링하여 const를 사용하고 대신 함수를 사용하세요. 예:

<code class="go">func GetUrl() string {
    return "http://google.com"
}

func main() {
    // Logic that uses GetUrl()
}</code>

테스트 파일에서 테스트 서버 URL을 반환하는 함수를 다시 정의할 수 있습니다.

<code class="go">// in main_test.go
func GetUrl() string {
    return "test_server_url"
}</code>

다른 접근 방식

const 값을 유지하려는 경우 기본 URL을 매개변수로 사용하고 실제 구현을 원래 함수에 위임하는 두 번째 함수를 생성할 수 있습니다.

<code class="go">const baseUrl_ = "http://google.com"

func MyFunc() string {
    // Call other function passing the const value
    return myFuncImpl(baseUrl_)
}

func myFuncImpl(baseUrl string) string {
    // Same implementation that was in your original MyFunc() function
}</code>

이 접근 방식을 사용하면 myFuncImpl()을 테스트하고 각 테스트 사례에 대해 서로 다른 기본 URL을 전달하여 MyFunc()의 구현을 테스트할 수 있습니다. 또한 원래 MyFunc() 함수는 항상 baseUrl_ 상수를 myFuncImpl()에 전달하므로 안전하게 유지됩니다.

위 내용은 상수 값에 의존하는 Go 코드를 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.