我正在使用Gomock randrange
和嘲笑
此测试的源代码为:
package sqs
import (
"errors"
"testing"
"path_to_the_mocks_package/mocks"
"github.com/golang/mock/gomock"
"github.com/aws/aws-sdk-go/service/sqs"
)
func TestPollWhenNoMessageOnQueue(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
msgr := mocks.NewMockMessenger(mockCtrl)
mq := make([]*sqs.Message, 1)
err := errors.New("Mock Error")
// msgr.EXPECT().GetMessage().Return(mq, err) //.Times(1)
// msgr.GetMessage().Return(mq, err) //.Times(1)
msgr.EXPECT().GetMessage().Return(mq, err)
p := NewPoller(msgr)
done := make(chan bool)
go p.Poll(done)
<-done
t.Logf("Successfully done: %v", done)
}
此源文件的测试用例在这里:
type mockMessenger struct {
mock.Mock
}
func (m *mockMessenger) GetMessage() ([]*sqs.Message, error) {
msgs := make([]*sqs.Message, 0)
err := errors.New("Error")
return msgs, err
}
运行测试时,出现以下错误:
sqs \ controller.go:150:意外呼叫 * path_to_mocks_package / mocks / mock_messenger.go:mocks.MockMessenger.GetMessage([]):38,因为:预期 在path_to_sqs_package / sqs / sqs_test.go处调用:35已被调用 最大次数。失败
如果我按如下所示编写自己的模拟,则测试用例将成功执行:
<T> T[] toArray(T[] a);
答案 0 :(得分:6)
您暗中告诉gomock,您只希望接到一个电话。
msgr.EXPECT().GetMessage().Return(mq, err)
在模拟中添加多个Times
,可以多次返回这些值。
msgr.EXPECT().GetMessage().Return(mq, err).AnyTimes()