0

自分のコードのテスト コードを書いていて、100% のコード カバレッジを得たいと考えています。

これはglog.Fatal()、たとえば、コーナー ケースをテストすることを意味します。

したがって、最初に必要なのは、glog をテストしていないため、glog による出力を無効にすることです。/tmpそのため、ファイルを生成したりメッセージを吐き出したりせずに go test を実行できますstderr

2 番目に必要なことは、呼び出しがglog.Fatal()テストos.Exit()の実行に干渉しないことです。

どうすればそれを達成できますか?

4

1 に答える 1

0

インターフェイスにプログラミングすることで、それを実現できるはずです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このようにして、実際にロガーを呼び出すことなく、ロガーを正しく構成する単体テストを実行できるはずです。

于 2016-11-26T16:20:37.673 に答える