Как проверить ожидание звонка в Go
У меня есть класс MyClass, который я хочу проверить.
MyClass имеет метод void, который вызывает внутренний сервер, чтобы что-то сделать.
func (d *MyClass) SendToServer(args)
do stuff....
server.Send(myMessage)
Я хочу смоделировать серверный вызов Send, но так как метод является пустым методом, я не могу быть уверен, что я действительно вызываю его правильно.
Вот варианты, которые я имел в виду:
- Используйте gomock, смоделируйте сервер и установите ожидания для метода send службы
- создайте свой собственный MockServer и "переопределите" метод Send с кучей проверок. Что-то вроде:
func (d * MockedServer) Send (message) // проверить сообщение...
- создайте свой собственный 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")
}
}
Это описано в лекции Эндрю Геррана " Методы тестирования".