定数値に依存する Go コードをテストするにはどうすればよいですか?

DDD
リリース: 2024-11-04 07:09:31
オリジナル
676 人が閲覧しました

How to Test Go Code That Relies on Constant Values?

Go での定数のテスト

Go プログラムを作成する際の一般的な課題の 1 つは、定数値に依存するコードをテストすることです。デフォルトでは、定数は一度定義すると再定義できないため、テスト中にさまざまな環境をシミュレートすることが困難になります。

問題のシナリオ

次のコードを考えてみましょう:

<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 をパラメータとして受け取り、実際の実装を元の関数に委任する 2 番目の関数を作成できます。

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!