見出し画像

go testの使い方と注意点について解説

今回はgo testについてを解説していきます。

go test

go testは、Goのプログラムのテストを自動化するためのコマンドです。
このコマンドを使用することでユニットテスト、ベンチマークテストなどを実行でき、開発プロセス中にコードの品質を保証することが出来るようになります。


go testの使い方

テストファイルの準備

 Goのテストファイルはテスト対象のファイル名に _test サフィックスを付けて作成することが多いです。
例えばcalculator.goのテストを書く場合、calculator_test.goという名前のファイルを作成します。


テスト関数の定義

テスト関数は Test で始まる名前を持ち、*testing.T型の引数を取ります。
以下はテスト関数のサンプルコードとなります。

package calculator

import "testing"

func TestAdd(t *testing.T) {
    got := Add(1, 2)
    want := 3
    if got != want {
        t.Errorf("Add(1, 2) = %d; want %d", got, want)
    }
}


テストの実行

テストを実行するにはテストファイルが存在するディレクトリで go test コマンドを実行します。

go test

このコマンドを実行することで、指定されたディレクトリ内のすべてのテストを実行し結果を出力します。

PASS
ok      calculator   0.002s


ベンチマークテスト

ベンチマークテストはコードのパフォーマンスを測定するために使用します。ベンチマーク関数はBenchmarkで始まります。

func BenchmarkAdd(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Add(1, 2)
    }
}

ベンチマークテストを実行するには、-benchフラグを使用します。

go test -bench=.
goos: linux
goarch: amd64
pkg: calculator
BenchmarkAdd-8    1000000000               0.273 ns/op
PASS
ok      calculator   1.245s


go testの注意点

テストカバレッジ

 テストカバレッジを測定するには、-coverフラグを使用します。これにより、テストがどの程度コードをカバーしているかがわかります。

go test -cover


並行テストの注意

テスト中に共有リソースへのアクセスがある場合データ競合を避けるために注意が必要です。
-raceフラグを使用をしようするとデータ競合を検出できます。

go test -race


長い実行時間のテスト

テストが非常に時間を要する場合は、-shortフラグを使って長いテストをスキップすることができます。
テスト関数内で t.Skip() を条件付きで呼び出すことで、短いテストのみを実行することも可能です。


外部依存性

ネットワーク通信やデータベースアクセスなど、外部依存性を持つテストは外部環境の影響を受けやすく、不安定になる可能性があります。
モックやスタブを利用することで、テストの信頼性と再現性を向上させることが出来ます。


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。
この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?