記事を書くきっかけ
Goで自動テストを作成する際にstretchr/testify
を使用しているのですが、suite
をよく使います。最初はライブラリ特有のものと思いsuite
について調べていたのですが、Test suite
という言葉があったことに驚きこの記事を書こうと思いました。
Test Suiteとは
一言でいうと、同じ種類のテストケースの集合体です。(bunch of test cases grouped for a specific purpose)
suiteの意味:組、揃(そろ)い、続きの間、スウィートルーム、
わかりやすくするために、user gatewayのunittestを例に説明します。
user gatewayのテストスイートがあり、その中にはCRUD操作に対応するテストケースが含まれています。具体的には、新規ユーザー作成(Create)、ユーザー情報の取得(Read)、ユーザー情報の更新(Update)、およびユーザー削除(Delete)に関するテストケースがそれぞれあります。これらのテストケースを一つのスイートにまとめることで、関連するテストを一括で管理・実行することができます。
Test Suiteのメリット
Test Suiteを使用することで、テストの管理が容易になります。例えば、ある機能に対して多くのテストケースが存在する場合、それらを1つのTest Suiteにまとめることで、テストの実行順序や依存関係を管理しやすくなります。また、特定のTest Suiteだけを選択して実行することも可能で、効率的なテストが可能となります。
test suiteを使用したサンプルコード
下記コードだと、ExampleTestSuite
がテストケースをまとめるtest suiteであり、その中にある同じ目的を持ったテストケースがTestExampleTestSuite
になります。
なので、もしTestExampleFailureTestSuite
のようなテストケースがあると同じtest suite内に属することになりいます。
// Basic imports
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)
// Define the suite, and absorb the built-in basic suite
// functionality from testify - including a T() method which
// returns the current testing context
type ExampleTestSuite struct {
suite.Suite
VariableThatShouldStartAtFive int
}
// Make sure that VariableThatShouldStartAtFive is set to five
// before each test
func (suite *ExampleTestSuite) SetupTest() {
suite.VariableThatShouldStartAtFive = 5
}
// All methods that begin with "Test" are run as tests within a
// suite.
func (suite *ExampleTestSuite) TestExample() {
assert.Equal(suite.T(), 5, suite.VariableThatShouldStartAtFive)
}
// In order for 'go test' to run this suite, we need to create
// a normal test function and pass our suite to suite.Run
func TestExampleTestSuite(t *testing.T) {
suite.Run(t, new(ExampleTestSuite))
}
参考