カスタム フラグを使用した単体テストの実行
Visual Studio Code (VS Code) では、次の場合に単体テストの実行とデバッグで問題が発生することがあります。特定のフラグを指定する必要があります。問題を詳しく調べて、包括的な解決策を提供しましょう。
問題の概要
VS Code から単体テストを実行する場合、ユーザーは次のようなカスタム フラグを指定する必要がある場合があります。提供された例では ldflags が使用されています。ただし、これらのフラグを VS Code のテスト ランナーに統合するときに困難に直面しました。
作業構成
実験を通じて、次のことを行うには 2 つの別個の構成が必要であることが判明しました。実行テストとデバッグ テストの両方の機能を実現します:
実行テスト:
<code class="json">"go.testFlags": [ "-ldflags", "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" ]</code>
デバッグ テスト:
<code class="json">"go.testFlags": [ "-ldflags", "'-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn'" ]</code>
根本的な問題
構成が異なる理由は、VS Code がテスト コマンドを生成する方法にあります。デバッグ時に、VS Code はコマンドに追加のパラメーターを追加します。これは、フラグの解釈方法に影響します。そのため、フラグが正しく渡されることを保証するには、デバッグ構成内の単一引用符が必要です。
考えられる解決策
複雑なテストをデバッグするために提案される代替方法は次のとおりです。テスト バイナリをコンパイルし、dlv デバッグ セッションを開始します。これにより、テストの実行とデバッグ エクスペリエンスをより細かく制御できるようになります。
デバッグに dlv を使用する
次の手順では、単体テストのデバッグに dlv を使用する方法の概要を説明します。
次のような必要なフラグを使用してテスト バイナリをコンパイルします。
go test -c -ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" -gcflags="all=-N -l"
ヘッドレス DLV セッションを開始します:
dlv exec ./foo.test --headless --listen=:2345 --log --api-version=2 -- -count=1 -- $(pwd)/some/path
VS Code で、起動構成ファイルを開きます (デバッグ: launch.json を開きます)。次のような構成を作成します。
<code class="json">{ "version": "0.2.0", "configurations": [ { "name": "Debug Test", "type": "go", "request": "attach", "mode": "remote", "port": 2345, "host": "127.0.0.1", "showLog":true, "trace":"log" } ] }</code>
以上がVS Code でカスタム フラグを使用して単体テストを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。