[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 関数に 46 を渡している場合と 35 を渡している場合の 2 通りを指定しています。それぞれ Return 関数で返り値が変わるようにしており、その後の if 文による検証で返り値が引数に合わせて変更されていることが分かります。
  • このテストを実行すると PASS となります。
Go