3

テストしたいクラス MyClass があります。

MyClass には、何かを行うために内部サーバーを呼び出す void メソッドがあります。

func (d *MyClass) SendToServer(args)
  do stuff....
  server.Send(myMessage)

サーバー呼び出し Send をモックしたいのですが、メソッドが void メソッドであるため、実際に正しく呼び出しているかどうか確信が持てません。

これらは私が念頭に置いていたオプションです:

  1. gomock を使用し、サーバーをモックし、サービスの send メソッドに期待値を設定します
  2. 独自の MockServer を作成し、Send メソッドを一連の検証で「オーバーライド」します。何かのようなもの:

func (d *MockedServer) Send(message) // メッセージを検証...

  1. 独自の MockServer を作成しますが、メソッド内の期待値を検証する代わりに、メッセージをメッセージのリストに追加してから、リストの内容を検証します。

Goでより良いアプローチは何ですか?

4

1 に答える 1

2

次のように、メソッドから関数を作成できます。

var sendToServer = (*Server).Send

func func (d *MyClass) SendToServer(args) {
    // ...
    sendToServer(server, msg)
    // ...
}

そしてあなたのテストでは:

func TestMyClass_SendToServer(t *testing.T) {
    // ...
    sent := false
    sendToServer = func(*Server, args) {
        sent = true
    }
    mc.SendToServer(args)
    if !sent {
        t.Error("fail")
    }
}

これについては、Andrew Gerrand のTesting Techniques talkで説明されています。

于 2015-01-30T10:31:00.917 に答える