インターフェイスにプログラミングすることで、それを実現できるはずです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 インスタンスの「作成」をカプセル化するのと同じくらい簡単にする必要があります。
func NewLogger Logger {
// configure `Glog`
// return `Glog`
}
NewLogger
このようにして、実際にロガーを呼び出すことなく、ロガーを正しく構成する単体テストを実行できるはずです。