[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 となります。