注記
EstifyはV1で維持されており、このレポでは壊れた変更は受け入れられません。
V2についての議論を参照してください。
Go Code(Golang)のパッケージセットは、意図したとおりにコードが動作することを証言するための多くのツールを提供します。
機能は次のとおりです。
簡単なアサーション
モッキング
スイートインターフェイスと機能のテスト
始めましょう:
1つのコードでTestifyをインストールするか、別のコードで更新します
GOのテストコードを作成するための紹介については、https://go.dev/doc/code#testingを参照してください。
APIドキュメントhttps://pkg.go.dev/github.com/stretchr/testifyをご覧ください
一般的な間違いを避けるために、extifyLint(Golanci-Lint経由)を使用してください
テスト駆動型開発(TDD)について少し
assert
パッケージassert
パッケージは、GOでより良いテストコードを作成できるいくつかの役立つ方法を提供します。
フレンドリーで読みやすい失敗の説明を印刷します
非常に読みやすいコードを可能にします
オプションで、各アサーションにメッセージを注釈します
動作中にそれを見てください:
yoursimport(「テスト」をパッケージ化する "github.com/stretchr/testify/assert")func testsomething(t *testing.t){// assert equality assert.equal(t、123、123、 "等しいはずです")//不平等を主張する assert.notequal(t、123、456、「それらは等しくないはずです」)// nilのアサート(エラーに適しています) assert.nil(t、object)// nilではないとassert(何かを期待するときは良い) assert.notnil(t、object){//オブジェクトがnilではないことがわかった場合、errorsassert.equal(t、 "bone"、object.value)を引き起こすことなく//さらなるアサーションを作成しても安全です。 } }
すべてのAssert Funcは、 testing.T
オブジェクトを最初の引数として取得します。 これは、通常のgo test
機能を介してエラーを書き出す方法です。
すべてのアサートFUNCは、アサーションが成功したかどうかを示すブールを返します。これは、特定の条件下でさらなる主張を作成したい場合に役立ちます。
何度も主張する場合は、以下を使用してください。
yoursimport(「テスト」をパッケージ化する "github.com/stretchr/testify/assert")func testsomething(t *testing.t){assert:= assert.new(t)// assert equality assert.equal(123、123、「それらは等しくなければならない」)//不平等を主張します assert.notequal(123、456、「それらは等しくないはずです」)// nilのアサート(エラーに適しています) assert.nil(object)// nilではないことをassertします(何かを期待するときは良い) assert.notnil(object){//オブジェクトがゼロではないことがわかっている場合、ErrorsAssert.equal( "Something"、object.value)を引き起こすことなく、//さらなるアサーションを作成してください。 } }
require
require
パッケージは、 assert
パッケージと同じグローバル機能を提供しますが、ブール結果を返す代わりに、現在のテストを終了します。これらの関数は、テスト中に作成された他のゴルチンからではなく、テストまたはベンチマーク関数を実行しているゴルウチンから呼び出す必要があります。それ以外の場合は、人種条件が発生する可能性があります。
詳細については、T.Failnowを参照してください。
mock
パッケージmock
パッケージは、テストコードを作成するときに実際のオブジェクトの代わりに使用できるモックオブジェクトを簡単に書き込むメカニズムを提供します。
外部オブジェクトtestObj
に依存するコードをテストし、期待を設定し(証言)、実際に発生したことを主張するテスト機能の例:
yoursimport(「テスト」をパッケージ化する "github.com/stretchr/testify/mock")/* testオブジェクト* /// mymockedobjectは、テストしているコードが依存しているオブジェクトを記述するインターフェイス//を実装する模擬オブジェクトです。 mock.mock} // dosomhiteはmymockedobjectのメソッドであり、ある程度のインターフェイス//を実装し、アクティビティを記録し、モックオブジェクトが伝えるものを返します。///しかし、これはモックされたオブジェクトであるため - 私たちはそれをスタブします。////注:この方法はここでテストされていません。 int)(bool、error){args:= m.called(number)return args.bool(0)、args.error(1) }/*実際のテスト関数*/// testsomhingsは、テストオブジェクトを//テストしているターゲットコードについてアサーションを作成する方法の例です。私たちのテストオブジェクト testobj:= new(myMockedObject)//期待を設定します testobj.on( "dosomething"、123).return(true、nil)//テストしているコードを呼び出す TargetFuncthatdoEssom -withobj(testobj)//期待が満たされたと主張します testobj.assertexpectations(t) } // testsomethingwithplaceholderは、テストオブジェクトを使用する方法の2番目の例です。/テストするターゲットコードについてアサーションを作成します。渡される//データが通常動的に生成され、事前に//予測することはできない場合にプレースホルダーが使用される場合があります(たとえば、時間に敏感なハッシュを含む)func testsomething -withplaceholder(t *testing.t){//私たちのインスタンスを作成するテストオブジェクト testobj:= new(mymockedObject)//引数リストのプレースホルダーで期待を設定する testobj.on( "dosomething"、mock.anything).return(true、nil)//テストしているコードを呼び出す TargetFuncthatdoEssom -withobj(testobj)//期待が満たされたと主張します testobj.assertexpectations(t) } // testsomethingelse2は、// Unestメソッドを使用する方法を示す3番目の例です。 testobj:= new(mymockedObject)//引数リストのプレースホルダーで期待を設定する mockcall:= testobj.on( "dosomething"、mock.anything).return(true、nil)//テストしているコードを呼び出す TargetFuncthatdoEssom -withobj(testobj)//期待が満たされたと主張します testobj.assertexpectations(t)//ハンドラーを今すぐ削除して、優先される別のものを追加できるように mockcall.unset()// trueの代わりにfalseを返します testobj.on( "dosomething"、mock.anything).return(false、nil)testobj.assertexpectations(t) }
Mockコードの書き方の詳細については、 mock
パッケージのAPIドキュメントをご覧ください。
ockeryツールを使用して、モックコードをインターフェイスに対しても自動ゼロ化し、モックを使用してはるかに速くすることができます。
suite
パッケージ警告
スイートパッケージは並列テストをサポートしていません。 #934を参照してください。
suite
パッケージは、より一般的なオブジェクト指向の言語から使用できる機能を提供します。 それを使用すると、テストスイートを構造体として構築し、構造体のセットアップ/分解方法を構築し、テスト方法を構築し、通常のように「GOテスト」で実行できます。
スイートの例を以下に示します。
// Basic ImportSimport( "Testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite") - 現在のテストContextType exampletesuite structを返すt()メソッドを含む{ suite.suitevariablethat ats startatfive int} // variablethat auldstartatfiveが各testfunc(suite *exampletestsuite)setuptest(){suite.variablethat auldstartatfive = 5} //すべての方法としてのテストとしてのテストの始まりです。 A // suite.func(suite *exampletestsuite)testexample(){assert.equal(suite.t()、5、suite.variablethat auldstartatfive) } //このスイートを実行するには、//通常のテスト関数を作成し、スイートをスイートに渡す必要があります。 ExampletestSuite)) }
より完全な例については、スイートパッケージが提供するすべての機能を使用して、テストスイートの例をご覧ください
スイートの書き込みの詳細については、 suite
パッケージのAPIドキュメントをご覧ください。
Suite
オブジェクトにはアサーションメソッドがあります。
// Basic ImportSimport( "Testing" "github.com/stretchr/testify/suite") suite.suitevariablethat ats startatfive int} // variablethat auldstartatfiveが各testfunc(suite *exampletestsuite)setuptest(){suite.variablethat auldstartatfive = 5} //すべての方法としてのテストとしてのテストの始まりです。 A // suite.func(suite *exampletestsuite)testexample(){suite.equal(suite.variablethatsshouldstartatfive、5) } //このスイートを実行するには、//通常のテスト関数を作成し、スイートをスイートに渡す必要があります。 ExampletestSuite)) }
ESTIFYをインストールするには、 go get
を使用してください。
go get github.com/stretchr/testify
これにより、次のパッケージが利用可能になります。
github.com/stretchr/testify/assert github.com/stretchr/testify/require github.com/stretchr/testify/mock github.com/stretchr/testify/suite github.com/stretchr/testify/http (deprecated)
このテンプレートを使用して、次のテンプレートを使用して、コードにtestify/assert
パッケージをインポートします。
yoursimport(「テスト」をパッケージ化する "github.com/strechr/testify/assert")func testsomething(t *testing.t){assert.true(t、true、" true is true! ") }
Testifyを最新バージョンに更新するには、 go get -u github.com/stretchr/testify
を使用してください。
現在、1.19以降の最新の主要なGOバージョンをサポートしています。
お気軽に問題を送信し、リポジトリをフォークし、プルリクエストを送信してください!
問題を提出するときは、問題を示す完全なテスト関数を含めることをお願いします。それを実証するテストコードを書くために、Testifyを使用している人のための追加のクレジット。
コード生成が使用されます。いくつかのファイルの上部にCode generated with
を探します。 go generate ./...
生成されたファイルを更新するには。
また、 #testify
および#testify-dev
チャンネルのGophers Slackグループでチャットします。
このプロジェクトは、MITライセンスの条件に基づいてライセンスされています。