🧪

【Go】Goのテストに入門してみた! ~一部のサブテスト実行編~

に公開

はじめに

前回はテーブル駆動テスト(Table Driven Test)について見ていきました。
今回は「一部のサブテストを実行する方法」に入門していきます。

前回の記事はこちら!
https://zenn.dev/tmyhrn/articles/8dcc4198903d7f

この記事でわかること

  • 一部のサブテストを実行する方法
  • 正規表現を用いたテストケースのパターン

実装してみた

main_test.go
package main

import (
    "testing"
    "unicode/utf8"
)

func Length(s string) int {
    return utf8.RuneCountInString(s)
}

func TestLength(t *testing.T) {
    tests := []struct {
        name  string
        input string
        want  int
    }{
        {"ascii", "Hello", 5},
        {"full-width-japanese", "こんにちは", 5},
        {"half-width-japanese", "コンニチハ", 5},
        {"emoji", "😃😃😃", 3},
        {"empty", "", 0},
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            if got := Length(tt.input); got != tt.want {
                t.Errorf("Length = %d, want %d", got, tt.want)
            }
        })
    }
}

ここまでは前回と同じです。
ここから、一部のサブテストだけ実行してみます。

ターミナル
# go test -v -run '^TestLength$/ascii'
=== RUN   TestLength
=== RUN   TestLength/ascii
--- PASS: TestLength (0.00s)
    --- PASS: TestLength/ascii (0.00s)
PASS
ok      go-test-practice        0.188s

asciiという名前のテストだけを実行しました。
どのように一部のサブテストを実行するのか、以下で見ていきましょう。

一部のサブテストの実行方法

1. -runフラグをつける

一部のサブテストを実行するには-runフラグをつけ、正規表現にマッチしたテストを実行します。

2. 正規表現を指定する

関数名/サブテスト名が基本形です。
いくつかの正規表現のパターンがあります。

全サブテストを実行

ターミナル
go test -run '^関数名$'

# 入力例
go test -run '^TestLength$'

特定のサブテストのみ実行

ターミナル
go test -run '^関数名$/サブテスト名'

# 入力例
go test -run '^TestLength$/ascii'

エスケープが必要なサブテストを実行

ターミナル
# 例:括弧を含む場合
go test -run '^関数名$/\(サブテスト名\)'

# 入力例
go test -run '^TestLength$/\(ascii\)'

複数のサブテストを実行

ターミナル
go test -run '^関数名$/(サブテスト名1|サブテスト名2)'

# 入力例
go test -run '^TestLength$/(ascii|emoji)'

サブテスト名に部分一致するものを指定

ターミナル
go test -run '^関数名$/.*テスト名の一部'

# 入力例
go test -run '^TestLength$/.*japanese'

複数のテスト関数・サブテストをまたがって実行

ターミナル
go test -run '^関数名の一部.*$/.*サブテスト名の一部'

# 入力例
go test -run '^Test.*$/.*japanese'
# Testから始まるテスト関数の、japaneseという文字列が末尾に含まれるサブテストを実行

全てのテストを実行

ターミナル
go test -run '.'

# go test と同じ

まとめ

今回は一部のサブテストを実行する方法を学びました。

  • 一部のサブテストだけを実行したいときは-runフラグを使う
  • 関数名/サブテスト名の正規表現で対象を絞る

フラグと正規表現を用いることで、必要なテストだけを簡単に選んで実行できます。
また、複数テストの組み合わせや、部分一致の活用で効率的なテスト実行が可能になります。

次回は、「一部のテストをスキップする方法」に入門していきます!

参考

https://future-architect.github.io/articles/20250509a/#サブテストの一部のみ実施したい
https://zenn.dev/storehero/articles/5f8995a71e3005
https://zenn.dev/canary_techblog/articles/2c11335be49f84#16.--run

Discussion