2017-09-15 8 views
0

いくつかのC関数のラッパーであるサードパーティライブラリを使用しています。残念ながら、ほぼすべてのGo関数は無料です(受信者がなく、メソッドではありません)。私が取った設計アプローチではなく、私が持っているものです。関数を使用したGolangテスト

ちょうど行くの標準的な「テスト」ライブラリを使用する:

は私が機能を模擬することができますテストを作成することを可能にする解決策はありますか?

ライブラリをストラクチャとインターフェイスにラップし、目的を達成するためにインターフェイスをモックする方法はありますか?


私は、生成されたデータセットも処理するモンテカルロシミュレーションを作成しました。私の評価アルゴリズムの1つは、評価のために第三者の関数を渡す特定のモデルを探します。私は自分のエッジケースを知っていて、コールカウントが何であるべきかを知っています。これが私がテストしたいものです。

おそらく、単純なカウンタがすべて必要ですか?


私が見つけたこのライブラリを使用している他のプロジェクトは、完全にカバーしていないか、全くテストしていません。

+4

「フリー」機能とは何ですか? – JimB

+0

Go受信機なしの機能。それらは構造体と結ばれていません。 – RomaH

+3

したがって、受信者を持つものはすべてメソッドと見なされるため、「関数」を意味します。関数は大部分の慣用句で広範に使用されており、ユニットテストからそれらを止めるものは何もありません。あなたは何を模倣したいですか? Goは、通常、いくつかの言語で使用されている "すべてを模擬する"という道を取っていません。 – JimB

答えて

0

実際の関数への参照を呼び出す必要があるときは、いつでも参照できます。

次に、関数をモックする必要があるときは、リファレンスをモック実装にポイントするだけです。あなたが使用してそれを行う機能を呼び出すために必要がある場合

var processInt func(int) int = externalFunction 

// this is the wrapper for an external function 
func externalFunction(i int) int { 
    return i * 10 // do something with input 
} 

あなたはそれへの参照を宣言し、直接ではなく、これを呼び出すことはありません:

のは、これはあなたの外部関数であるとしましょう参照:

fmt.Println(processInt(5)) 

次に、あなたはちょうどお尻の機能を模擬したいその参照にモック実装をIGN:

processInt = mockFunction 

この遊び場は一緒にそれを置くと説明より明らかであるかもしれない:

https://play.golang.org/p/xBuriFHlm9

あなたはfunc(int) intを受け取る機能を持っている場合は、することができます実際にexternalFunctionまたはmockFunctionのモック実装を使用する場合は、その関数を送信してください。

関連する問題