2017-02-22 48 views
0

Я родом из python, и я искал способ написать yests в go. Я натолкнулся на некоторые вещи на SO, но все они кажутся очень громоздкими и многословными для чего-то, что нужно постоянно.mocking in go. Есть ли простой способ?

Я печатаю на мобильном телефоне теперь будет добавить код позже, если это необходимо ... но, к примеру ...

говорят, у меня есть функция, которая вызывает smtp.Send где-то в середине. как я могу легко проверить эту функцию?

Скажите, что у меня есть другой, который попадает на некоторые внешние api (нуждается в насмешливости), а затем принимает ответ и вызывает что-то вроде ioutil.Readall() ... как я могу пробиться через эту тестовую функцию и высмеять вызов api, а затем передавать некоторые поддельные данные ответа, когда вызывается Readall?

+1

Опубликовать некоторые трески, иначе это довольно сложно знать, что вы пытаетесь сделать – Tinwor

ответ

1

Вы можете сделать это с помощью интерфейса. Например, скажем, у вас есть интерфейс, который называется Mailer:

type Mailer interface { 
    Send() error 
} 

Теперь вы можете вставлять объект Mailer в функцию, которая вызывает метод Send.

type Processor struct { 
    Mailer 
} 

func (p *Processor) Process() { 
    _ = p.Mailer.Send() 
} 

Теперь в вашем тесте вы можете создать макет Mailer.

type mockMailer struct{} 
//implement the Send on the mockMailer as you wish 

p := &Processor{ 
    Mailer: mockMailer, 
} 

p.Process() 

когда p.Process достигает Send метод, который он называет ваш издевались Send метод.

+0

спасибо за простой пример ... в этом случае функция, которую я хочу проверить, ДОЛЖНА принять интерфейс Mailer в качестве входного ... правильно? – deltaskelta

+0

@deltaskelta Кроме того, чтобы высмеять вызов API, вы можете использовать net/http/httptest –

 Смежные вопросы

  • Нет связанных вопросов^_^