2017-05-22 2 views
0

私は自分自身のassertメソッドでtesting.Tをカスタマイズして、私が書いている行数を減らそうとしています。私は次のように試して、エラー:"wrong signature for TestCustom, must be: func TestCustom(t *testing.T)"で終了しました。テストでカスタム化をテストします。

どうすればTestCustomを使用できますか?CustomTester新しい方法のインターフェイスassert

私は第三者フレームワークを使用したくありません。

custom_testing.go

type CustomTester struct { 
     testing.TB 
} 

func (t *CustomTester) assert(exp interface{}, act interface{}) { 
     if exp != act { 
       t.Errorf("expected: %v. got: %v\n", exp, act) 
     } 
} 

// I want testing package inject testing.T here 
// But, by using my own wrapper: CustomTester struct with, 
// my own assert method to get rid of using t as an argument, 
// in each assert like: assert(t, exp, act) 
func TestCustom(t *testing.TB) { 
     t.assert(3, len(foo)) 
} 

注:私もこれを試してみました、それは私がテストしていたときに毎回t渡す必要はありませんが、動作します:

working_not_wanted.go

func assert(t *testing.TB, exp interface{}, act interface{}) { 
     if exp != act { 
       t.Errorf("expected: %v. got: %v\n", exp, act) 
     } 
} 

func TestCustom(t *testing.T) { 
     assert(t, 3, len(foo)) 
} 
+1

't'はテストパッケージとやりとりする方法です。あなたは_somehow_の周りを渡す必要があります。 ['testify'](https://github.com/stretchr/testify)のようなパッケージがまったくどのように動作するかを見てきましたか? – JimB

+0

ええ、私は 't'とやりとりしたいのですが、私のラップされた' CustomTester'インターフェースを使って負担を軽減しています。それを今見ようとする。 –

+0

@JimB私は実装したときに受信機で 't'を使いたいと思っています。私は 'testify'を見直しましたが(' t'と対話します)(https://github.com/stretchr/testify/blob/master/assert/assertions.go)、 'assert.New t) 'を使用している場合、最初のパラメータは望ましくありません。私もこれを試して、それはもちろん動作します。 –

答えて

0

Goテストフレームワークは特定のシグネチャのテスト機能を実行し、そのシグネチャは*testing.Tです。 stdlibテストシステムを使用する場合は、テスト関数に必要な署名が必要です。

あなたは、すべてのテスト関数に1行でそれをラップすることができます:STDLIBを使用して、

func MyTest(stdt *testing.T) { 
    // This line: 
    t := &CustomTester{stdt} 
    t.assert(true) 
    t.Error("An error done happened") 
} 

はそれを行うために他の方法がありますが、go testが運営するテスト機能を持ってする方法はありませんtestingパッケージは、*testing.T以外のものを唯一のパラメータとしてとります。

+0

'testing'パッケージのためにキャッチャーのようなものを自動的に作成してカスタムシグネチャーテスターに​​リダイレクトすることはできませんか? –

+0

"キャッチャー"が何を意味しているのか分かりませんが、独自のテストフレームワークと考えられるものを記述しているように思えます。 – Adrian

+0

ええ、私はそれをするためのトリックを探しています。外部の枠組みなしで行うのは難しいですか?いくつかの関数は、外部フレームワークではなく、おそらく(_?の手がかりはまだありません)、それを行うに書き込みます。キャッチャーは代理人のように行動します。 –

関連する問題