Я новичок в Go и тоже изо всех сил пытаюсь высмеять звонок: sarama.NewConsumerGroup(brokers, group, config)

Я использую testify, и мой фиктивный код в настоящее время выглядит так:

type MyMockedObjectReciever struct {
    mock.Mock
    Receiver
}

func (m *MyMockedObjectReciever) mockCreateConsumer(brokers []string, group string, config *sarama.Config) (sarama.ConsumerGroup, error) {
    args := m.Called(brokers, group, config)
    return args.Get(0).(sarama.ConsumerGroup), args.Error(1)
}

// mock connection and subscribe
        wantConsumer := sarama.NewConsumerGroup
        createConsumer = c.mockCreateConsumer
        c.On("mockCreateConsumer", []string{testBrokers}, testGroup, wantConfig).Return(wantConsumer, nil).Once()

Но получаю ошибку:

--- FAIL: TestKafkaReceiver (0.00s)
    --- FAIL: TestKafkaReceiver/test_a_Kafka_receiver (0.00s)
panic: interface conversion: func([]string, string, *sarama.Config) (sarama.ConsumerGroup, error) is not sarama.ConsumerGroup: missing method Close [recovered]
    panic: interface conversion: func([]string, string, *sarama.Config) (sarama.ConsumerGroup, error) is not sarama.ConsumerGroup: missing method Close

Я считаю, что неправильно издеваюсь над вызовом, но не знаю, что еще делать.

0
Silk13 15 Июн 2020 в 18:40

1 ответ

Лучший ответ

Вы можете написать своего фиктивного потребителя, как это показано ниже, который будет удовлетворять объекту consumergroup.

// Consumergroup handler
type testConsumerGroupHandler struct {
}

func (C testConsumerGroupHandler) Consume(ctx context.Context, topics []string, handler sarama.ConsumerGroupHandler) error {
    return nil
}
func (C testConsumerGroupHandler) Errors() <-chan error {
    return nil
}
func (C testConsumerGroupHandler) Close() error {
    return nil
}

После этого вы должны написать свои методы для успеха и неудачи и, соответственно, настроить имитационное тестирование.

1
Bhupinder Singh Narang 18 Июн 2020 в 00:45