我正在尝试使用 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 …Run Code Online (Sandbox Code Playgroud)