🐶

dd-trace-goのmocktracerはテスト時に便利

2025/02/26に公開

はじめに

自動テスト時に動かすtracerを探していたところmocktracerを見つけたのでそれを紹介する。

そのようなtracerを探すに至った経緯はこちら(読み飛ばして良い):
dd-trace-goのv1.72.0のリリースでtracerが起動していない場合tracer.SpanFromContextの第二返り値はfalseが返るようになった。

There is a minor behaviour breaking change in tracer.SpanFromContext. Now, it also returns false in the second return value when the span from the context is a no-op span, which only happens when spans are created without a tracer being started (previously it used to return true). This change shouldn't have any effect in applications that correctly start the tracer before creating spans.

それに伴いいくつかのテストが落ちたので、テスト時もtracerを動かす必要があった。

結論

テスト時はmocktracerが使える。mocktracerならばtraceの送信などはスキップされる。以下のように使う。

func TestXxx(t *testing.T) {
  mt := mocktracer.Start()
  defer mt.Stop()

  // spanを必要とするロジックのテストを書く
}

TestMainなどで起動しておくのも便利。

func TestMain(m *testing.M) {
  mt := mocktracer.Start()
  exitCode := m.Run()
  mt.Stop()

  os.Exit(exitCode)
}

おわり

Datadogやotel周りのGo packageはメジャーバージョンアップでなくともガンガンBREAKING CHANGEが入る印象がある。

GitHubで編集を提案

Discussion