[Go] gomock を使って渡された引数に応じて関数の返り値を変更する
作成日: 2022年11月02日
EXPECT
関数を使って関数の挙動を変更する際に、引数を具体的に指定して返り値を指定すると、引数の内容に応じて返り値を変更することができます。下記に具体例を記載します。
まず、テストの対象となるインターフェースを作成します。
package main
type DummyInterface interface {
AddNumbers(a int, b int) int
}
次に、AddNumbers
関数のモックを作成し、挙動を変更するテストコードです。
package main
import (
"testing"
"github.com/golang/mock/gomock"
)
func TestAddNumbers(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockDummy := NewMockDummyInterface(ctrl)
mockDummy.
EXPECT().
AddNumbers(4, 6).
Return(12)
mockDummy.
EXPECT().
AddNumbers(3, 5).
Return(10)
n := mockDummy.AddNumbers(3, 5)
if n != 10 {
t.Fatal("n is not 10")
}
m := mockDummy.AddNumbers(4, 6)
if m != 12 {
t.Fatal("m is not 12")
}
}
説明
EXPECT
関数にメソッドチェーンを行うかたちで、AddNumbers
関数に4
と6
を渡している場合と3
と5
を渡している場合の 2 通りを指定しています。それぞれReturn
関数で返り値が変わるようにしており、その後の if 文による検証で返り値が引数に合わせて変更されていることが分かります。- このテストを実行すると PASS となります。