Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gomock missing call(s)

I am trying to mock the below method using gomock

func (w *writer) Publish(vacancies []model.Vacancy) error {
    ...

    if _, err = w.conn.WriteMessages(msg); err != nil {
        return fmt.Errorf("failed to write message: %w", err)
    }

Interface:

type Producer interface {
        Publish(vacancies []model.Vacancy) error
        Close() error
    }

SuiteTest:

func (p *ProducerTestSuite) SetupTest() {
    p.mockCtrl = gomock.NewController(p.T())
    p.producer = NewMockProducer(p.mockCtrl)
    writer, err := producer.NewWriter(context.Background(), scheduler.KafkaConf{Addr: "localhost:9092", Topic: "test"})
    p.Require().NoError(err)
    p.writer = writer
}
...
func (p *ProducerTestSuite) TestProducer_Publish() {
    p.producer.EXPECT().Publish([]model.Vacancy{}).Return(nil)
    p.Require().NoError(p.writer.Publish([]model.Vacancy{}))
}

mockgen:

//go:generate mockgen -package producer_test -destination mock_test.go -source ../kafka.go

When I try run test, I got this message:

=== RUN   TestSuite/TestProducer_Publish
    controller.go:137: missing call(s) to *producer_test.MockProducer.Publish(is equal to [] ([]storage.Vacancy)) /Users/...
    controller.go:137: aborting test due to missing call(s)

Where I wrong?

like image 519
Ramil Kuvatov Avatar asked Sep 21 '26 00:09

Ramil Kuvatov


1 Answers

This answer is late, but it might helpful.

To require the function to be called once:

mockService.EXPECT().DoSomething().Return(nil, nil)

To allow the function to be called zero or more times:

mockService.EXPECT().DoSomething().Return(nil, nil).AnyTimes()
like image 195
TaQuangTu Avatar answered Sep 22 '26 19:09

TaQuangTu