同様のシグネチャと戻り値を持つ複数の関数をテストする場合、関数ごとに個別のテストを記述するのは面倒です。 Go では、リフレクションによって、これらの関数をまとめてテストするためのソリューションが提供されます。
次のシグネチャを持つ一連の関数 (Func1、Func2、...) を考えてみましょう:
func YourFunction() (int, error)
Goal: この一連の関数を反復するテストを作成します。それぞれを呼び出し、特定の条件に対する戻り値をテストします。
Reflection を使用すると、実行時に値と関数にアクセスして操作できます。レシーバーのreflect.Valueオブジェクトを作成すると、対応する関数を見つけて、reflect.Value.MethodByNameを使用して呼び出すことができます。その後、返された値が正しいかどうかを調べることができます。
指定されたインターフェイスを持つすべての関数をテストするためにリフレクションを利用するテストの例を次に示します:
func TestFunc(t *testing.T) {
var funcNames = []string{"Func1", "Func2", "Func3"}
stype := reflect.ValueOf(s) // receiver
for _, fname := range funcNames {
sfunc := stype.MethodByName(fname)
ret := sfunc.Call([]reflect.Value{})
val := ret[0].Int()
err := ret[1]
if val リフレクションによる例外処理
リフレクションを使用して存在しない関数を呼び出すとパニックが発生することに注意してください。これに対処するには、遅延関数と回復を使用してパニックをキャッチし、より有益なエラー メッセージを提供できます。
結論
リフレクションを利用して例外を適切に処理することで、次のような単一のテストを作成できます。同様の動作を持つ複数の関数を効率的にテストし、反復的なテスト コードの必要性を減らし、テストの堅牢性を確保します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3