2

golang で変数として宣言された関数を testify で起動する際に問題があります。

テストと関数の両方が同じパッケージで宣言されています。

var testableFunction = func(abc string) string {...}

今、私はtestableFunctionを呼び出すユニットテストで別のファイルを持っています

func TestFunction(t *testing.T){
     ...
     res:=testableFunction("abc")
     ...
}

TestFunction を呼び出してgo testも例外は発生しませんが、testableFunction は実際には実行されません。なんで?

4

1 に答える 1

2

これは、testableFunction変数がコード内の別の場所に割り当てられるためです。

次の例を参照してください。

var testableFunction = func(s string) string {
    return "re: " + s
}

テストコード:

func TestFunction(t *testing.T) {
    exp := "re: a"
    if got := testableFunction("a"); got != exp {
        t.Errorf("Expected: %q, got: %q", exp, got)
    }
}

実行中go test -cover:

PASS
coverage: 100.0% of statements
ok      play    0.002s

明らかに、テストの実行前に新しい関数値が割り当てられた場合testableFunction、変数の初期化に使用される無名関数はテストによって呼び出されません。

実証するには、テスト関数を次のように変更します。

func TestFunction(t *testing.T) {
    testableFunction = func(s string) string { return "re: " + s }

    exp := "re: a"
    if got := testableFunction("a"); got != exp {
        t.Errorf("Expected: %q, got: %q", exp, got)
    }
}

実行中go test -cover:

PASS
coverage: 0.0% of statements
ok      play    0.003s
于 2016-11-28T14:38:11.797 に答える