Как проверить ожидание звонка в Go

У меня есть класс MyClass, который я хочу проверить.

MyClass имеет метод void, который вызывает внутренний сервер, чтобы что-то сделать.

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

Я хочу смоделировать серверный вызов Send, но так как метод является пустым методом, я не могу быть уверен, что я действительно вызываю его правильно.

Вот варианты, которые я имел в виду:

  1. Используйте gomock, смоделируйте сервер и установите ожидания для метода send службы
  2. создайте свой собственный MockServer и "переопределите" метод Send с кучей проверок. Что-то вроде:

func (d * MockedServer) Send (message) // проверить сообщение...

  1. создайте свой собственный MockServer, но вместо проверки ожидаемого значения в методе добавьте сообщение в список сообщений, а затем проверьте содержимое списка.

Какой подход лучше в Go?

1 ответ

Вы можете сделать функцию из вашего метода следующим образом:

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")
    }
}

Это описано в лекции Эндрю Геррана " Методы тестирования".

Другие вопросы по тегам