見出し画像

gokang testify使い方と注意点について

今回はGo言語のtestifyについて解説していきます。

testify

testifyはGo言語でのテストを強化するためのライブラリで、より豊富なアサーション機能やモック機能を提供しています。
testifyを使用することでGoの標準テストパッケージよりも表現力豊かで読みやすいテストコードが書けるようになります。


testifyの使い方

testifyには主にアサーション、モック、スイートの3つの機能があります。

アサーションの使用

testify/assertパッケージを使用して、テストの条件を簡潔に表現します。

package main

import (
    "testing"
    "github.com/stretchr/testify/assert"
)

func TestCalculation(t *testing.T) {
    result := SomeCalculationFunction(2, 2)
    assert.Equal(t, 4, result, "they should be equal")
}

SomeCalculationFunctionが2と2の引数で4を返すことを期待しています。
もし期待値と実際の結果が異なる場合、テストは失敗し、エラーメッセージが表示されます。


モックの使用

testify/mockパッケージを使うことで、依存するコンポーネントのモックを作成し、特定のメソッドが期待通りに呼ばれるかを検証できます。

type MyMockedObject struct {
    mock.Mock
}

func (m *MyMockedObject) DoSomething(number int) bool {
    args := m.Called(number)
    return args.Bool(0)
}

func TestDoSomething(t *testing.T) {
    testObj := new(MyMockedObject)
    testObj.On("DoSomething", 123).Return(true)

    testResult := testObj.DoSomething(123)
    assert.True(t, testResult)
    testObj.AssertExpectations(t)
}

DoSomethingメソッドが期待される引数123で呼び出され、trueを返すかを検証しています。


テストスイートの使用

testify/suiteパッケージを使用して、テストケースを整理し、共通のセットアップとティアダウンロジックを共有します。

type ExampleTestSuite struct {
    suite.Suite
    VariableThatShouldBeAvailableInAllTests string
}

func (suite *ExampleTestSuite) SetupTest() {
    suite.VariableThatShouldBeAvailableInAllTests = "Initialize me"
}

func (suite *ExampleTestSuite) TestExample() {
    assert.Equal(suite.T(), "Initialize me", suite.VariableThatShouldBeAvailableInAllTests)
}

func TestExampleTestSuite(t *testing.T) {
    suite.Run(t, new(ExampleTestSuite))
}


testifyの注意点

過剰なモックの使用

モックを過剰に使用すると、実際の挙動から離れたテストが作成される可能性があります。
必要なところだけにモックを使用し、実際のコンポーネントとのインテグレーションテストも行うバランスが重要です。


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

初めてのGo言語

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


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

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

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


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

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


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

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

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

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


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

この経験に学べ

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