我正在尝试使用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)
}接口:
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当我尝试运行测试时,我得到了这样的消息:
=== 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)我哪里错了?
发布于 2021-08-16 09:27:12
看起来你调用的东西和你期望的不一样。您的预期是查看p.producer.Publish(),但您的测试代码调用p.writer.Publish()。我在这里看不到任何代码会导致writer调用producer中的任何内容。
下面的代码将按照您的预期运行:
func (p *ProducerTestSuite) TestProducer_Publish() {
p.producer.EXPECT().Publish([]model.Vacancy{}).Return(nil)
p.Require().NoError(p.producer.Publish([]model.Vacancy{}))
}然而,这个测试似乎并没有实际执行测试名称表明它应该执行的单元。也许你误解了mocking?
https://stackoverflow.com/questions/68794050
复制相似问题