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