Go でリフレクションを使用した関数のコレクションをテストする
同様のシグネチャと戻り値を使用して関数を効率的にテストする必要性に対処するために、リフレクションは以下を提供します。強力な解決策です。 Go では、リフレクト パッケージは、実行時に値、型、関数を検査および操作できる機能を提供します。
複数の関数を同様の条件でテストする必要がある特定のシナリオでは、リフレクションを使用すると次のことが可能になります。単一のテストを作成します。このテストには次の手順が含まれます:
ここで説明されているアプローチを示すテスト コードの抜粋です:
<code class="go">func TestFunc(t *testing.T) { stype := reflect.ValueOf(s) for _, fname := range funcNames { sfunc := stype.MethodByName(fname) ret := sfunc.Call([]reflect.Value{}) val := ret[0].Int() err := ret[1] if val < 1 { t.Error(fname + " should return positive value") } if err.IsNil() == false { t.Error(fname + " shouldn't err") } } }</code>
このテストは関数のスライスを反復処理します。名前を指定し、各関数を名前で検索して呼び出し、戻り値をアサートして、各関数が指定されたテスト条件を満たしていることを確認します。指定された名前の関数が存在しない場合、テストはパニックになることに注意してください。このケースを適切に処理するには、パニックから回復するための defer ステートメントを追加することを検討してください。
このアプローチにより、機能と柔軟性を活用して、類似したシグネチャと戻り値を持つ複数の関数を検証する単一のテストを効率的に作成できます。 Go でのリフレクションの説明。
以上がリフレクションを使用すると、Go で同様のシグネチャを持つ複数の関数のテストをどのように簡素化できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。