2017-03-04 4 views
1

私が使っていた他のテストフレームワークでは、テストヘルパーを書くときに自動的にテストすることができます。go testの失敗を予期することができますか?

(現実には多くの複雑なのです)私はヘルパーのために以下を使用してみましょう:

func TestIsRedirect(t *testing.T) { 
    IsRedirect(t, http.StatusSeeOther) 
} 
をしかし、私はまたしたいと思います。そして、

func IsRedirect(t *testing.T, code int) { 
    assert.True(t, code >= 300) 
    assert.True(t, code < 400) 
} 

必ず、私は書くことができます

func TestNotRedirect(t *testing.T) { 
    t.RequireFailure() 
    IsRedirect(t, http.StatusOK) 
} 

注、私は本当に書きたくない:

ような何かを書きます
func IsRedirect(code int) bool 

この機能には1つまたは2つ以上の条件が満たされていないため、具体的なケースではassertになりたいからです。

+1

IMOのテストフレームワークはダムです。失敗はどういう意味ですか?あなたがテストした条件の1つが失敗しましたか?それはすべて失敗したのですか?あなたは無関係な無限ポインタ逆参照を持っているのですか?あなたの初期化コードがクラッシュしましたか?あなたがそれらの事のいずれかが起こることを期待すれば、あなたはそれらをテストすることができます。条件を逆にするのは簡単です。あなたが実際に意味することをフレームワークが正しく推測することは不可能です。 – Art

+1

これは本当に奇妙な実装のようです。あなたは主張を支配している。フレームワークに「正しい」と「間違っている」と言っているのですが、正しいかどうかの意味を逆にしたいのですか?ちょうどあなたが実際に期待していることを主張する。 – Adrian

答えて

0

次のようにあなたは何かができる:「失敗を想定し、」モードがあり

func IsRedirect(t *testing.T, code int, b bool) { 
    assert.Equal(t, b, code >= 300) 
    assert.Equal(t, b, code < 400) 
} 

func TestNotRedirect(t *testing.T) { 
    IsRedirect(t, http.StatusOK, false) 
} 
関連する問題