Skip to content

Instantly share code, notes, and snippets.

@utamori
Last active July 21, 2020 04:22
Show Gist options
  • Select an option

  • Save utamori/cce0614598635750f79f73b7fc1b6a75 to your computer and use it in GitHub Desktop.

Select an option

Save utamori/cce0614598635750f79f73b7fc1b6a75 to your computer and use it in GitHub Desktop.
package yours
import (
"testing"
"github.com/stretchr/testify/mock"
)
/*
テストオブジェクト
*/
// MyMockedObject はインターフェイスを実装したモックされたオブジェクトです。
// これは、私がテストしているコードが依存しているオブジェクトを記述しています。
type MyMockedObject struct {
mock.Mock
}
// DoSomething は、いくつかのインターフェイスを実装した MyMockedObject のメソッドです。
// と、アクティビティを記録するだけで、Mockオブジェクトが指示したものを返します。
//
// 実際のオブジェクトでは、このメソッドは何か便利なことをするでしょうが、
// これはモックされたオブジェクトなので、これをスタブアウトします。
// 注: このメソッドはここではテストされていませんが、このオブジェクトを使用するコードはテストされています。
func (m *MyMockedObject) DoSomething(number int) (bool, error) {
args := m.Called(number)
return args.Bool(0), args.Error(1)
}
/*
実際のテスト機能関数
*/
// TestSomething は、テストオブジェクトを使って、
// テストしているターゲットコードについてアサーションを行う方法の例です。
func TestSomething(t *testing.T) {
// テストオブジェクトのインスタンスを作成します
testObj := new(MyMockedObject)
// 期待値を設定する
testObj.On("DoSomething", 123).Return(true, nil)
// テストするコードを呼び出す
targetFuncThatDoesSomethingWithObj(testObj)
// assertする
testObj.AssertExpectations(t)
}
// TestSomethingElse は、テストオブジェクトを使用して、
// テストしているターゲットコードについてアサーションを行う方法の二番目の例です。
// 今回はプレースホルダを使用します。プレースホルダーは、通常は動的に生成されるデータで、
// 事前に予測できない場合に使用されることがあります(例えば、時間的に左右されるハッシュが含まれている場合など)。
func TestSomethingElse(t *testing.T) {
// テストオブジェクトのインスタンスを作成します
testObj := new(MyMockedObject)
// 引数リストのプレースホルダで期待値を設定します。
testObj.On("DoSomething", mock.Anything).Return(true, nil)
// テストしているコードを呼び出す
targetFuncThatDoesSomethingWithObj(testObj)
// アサーションします
testObj.AssertExpectations(t)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment