glog
インターフェイスでプログラミングすれば実現できます。私はそれが何であるかわからないんだけど、それは次に
type Logger interface {
Fatal()
Info()
// etc...
}
あなたのパッケージのようになります/機能/構造体など、地球を含めたに反対のインターフェースを必要としなければなりません。
type SomeStruct struct {
log Logger
}
またはあなたのトップレベルのモジュール上:
func SomeFunc(log Logger) {}
インターフェースを使用してはロガー特定の実装からコードを分離します。
ユニットテストでは、テスト固有のロガー(スタブまたはモック)を作成できます。
type TestLogger struct {}
func (tl TestLogger) Fatal() {}
func (tl TestLogger) Info() {}
// etc....
次に、あなたのコードは、本番コードでは、実際のGlog
インスタンスをインスタンス化して設定できるようにしています。これをテストするには、Glogインスタンスを "作成する"のように単純にカプセル化する必要があります。あなたはユニットテストNewLogger
にできるはずです
func NewLogger Logger {
// configure `Glog`
// return `Glog`
}
この方法では、実際にロガーへの呼び出しを行うことなく、正しくロガーを設定します。
これは面白そうです。私はグロッグの依存関係を削除します。それはグローバルを使用します。 – chmike