gomock 未接来电

Ram*_*tov 3 go apache-kafka gomock

我正在尝试使用 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)
    }

Run Code Online (Sandbox Code Playgroud)

界面:

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

Run Code Online (Sandbox Code Playgroud)

套件测试:

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

Run Code Online (Sandbox Code Playgroud)

模拟生成:

//go:generate mockgen -package producer_test -destination mock_test.go -source ../kafka.go
Run Code Online (Sandbox Code Playgroud)

当我尝试运行测试时,我收到以下消息:

=== 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)
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

TaQ*_*gTu 8

这个答案来晚了,但可能会有所帮助。

要求函数被调用一次:

mockService.EXPECT().DoSomething().Return(nil, nil)
Run Code Online (Sandbox Code Playgroud)

允许函数被调用零次或多次:

mockService.EXPECT().DoSomething().Return(nil, nil).AnyTimes()
Run Code Online (Sandbox Code Playgroud)