首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gomock缺少呼叫

gomock缺少呼叫
EN

Stack Overflow用户
提问于 2021-08-15 17:49:57
回答 1查看 2.9K关注 0票数 1

我正在尝试使用gomock模拟下面的方法

代码语言:javascript
复制
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)
    }

接口:

代码语言:javascript
复制
type Producer interface {
        Publish(vacancies []model.Vacancy) error
        Close() error
    }

SuiteTest:

代码语言:javascript
复制
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:

代码语言:javascript
复制
//go:generate mockgen -package producer_test -destination mock_test.go -source ../kafka.go

当我尝试运行测试时,我得到了这样的消息:

代码语言:javascript
复制
=== 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)

我哪里错了?

EN

回答 1

Stack Overflow用户

发布于 2021-08-16 09:27:12

看起来你调用的东西和你期望的不一样。您的预期是查看p.producer.Publish(),但您的测试代码调用p.writer.Publish()。我在这里看不到任何代码会导致writer调用producer中的任何内容。

下面的代码将按照您的预期运行:

代码语言:javascript
复制
func (p *ProducerTestSuite) TestProducer_Publish() {
    p.producer.EXPECT().Publish([]model.Vacancy{}).Return(nil)
    p.Require().NoError(p.producer.Publish([]model.Vacancy{}))
}

然而,这个测试似乎并没有实际执行测试名称表明它应该执行的单元。也许你误解了mocking?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68794050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档