Example code on how to mock gRPC services
This commit is contained in:
2
examples/helloworld/mock/generate_mock.sh
Executable file
2
examples/helloworld/mock/generate_mock.sh
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
mockgen google.golang.org/grpc/examples/helloworld/helloworld GreeterClient > mock_helloworld/hw_mock.go
|
||||||
|
gofmt -w mock_helloworld/hw_mock.go
|
49
examples/helloworld/mock/hw_test.go
Normal file
49
examples/helloworld/mock/hw_test.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package mock
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/golang/mock/gomock"
|
||||||
|
proto "github.com/golang/protobuf/proto"
|
||||||
|
"golang.org/x/net/context"
|
||||||
|
"google.golang.org/grpc/examples/helloworld/helloworld"
|
||||||
|
hwmock "google.golang.org/grpc/examples/helloworld/mock/mock_helloworld"
|
||||||
|
)
|
||||||
|
|
||||||
|
// rpcMsg implements the gomock.Matcher interface
|
||||||
|
type rpcMsg struct {
|
||||||
|
msg proto.Message
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *rpcMsg) Matches(msg interface{}) bool {
|
||||||
|
m, ok := msg.(proto.Message)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return proto.Equal(m, r.msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *rpcMsg) String() string {
|
||||||
|
return fmt.Sprintf("is %s", r.msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSayHello(t *testing.T) {
|
||||||
|
ctrl := gomock.NewController(t)
|
||||||
|
defer ctrl.Finish()
|
||||||
|
mockGreeterClient := hwmock.NewMockGreeterClient(ctrl)
|
||||||
|
req := &helloworld.HelloRequest{Name: "unit_test"}
|
||||||
|
mockGreeterClient.EXPECT().SayHello(
|
||||||
|
gomock.Any(),
|
||||||
|
&rpcMsg{msg: req},
|
||||||
|
).Return(&helloworld.HelloReply{Message: "Mocked Interface"}, nil)
|
||||||
|
testSayHello(t, mockGreeterClient)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testSayHello(t *testing.T, client helloworld.GreeterClient) {
|
||||||
|
r, err := client.SayHello(context.Background(), &helloworld.HelloRequest{Name: "unit_test"})
|
||||||
|
if err != nil || r.Message != "Mocked Interface" {
|
||||||
|
t.Errorf("mocking failed")
|
||||||
|
}
|
||||||
|
t.Log("Reply : ", r.Message)
|
||||||
|
}
|
48
examples/helloworld/mock/mock_helloworld/hw_mock.go
Normal file
48
examples/helloworld/mock/mock_helloworld/hw_mock.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
// Automatically generated by MockGen. DO NOT EDIT!
|
||||||
|
// Source: google.golang.org/grpc/examples/helloworld/helloworld (interfaces: GreeterClient)
|
||||||
|
|
||||||
|
package mock_helloworld
|
||||||
|
|
||||||
|
import (
|
||||||
|
gomock "github.com/golang/mock/gomock"
|
||||||
|
context "golang.org/x/net/context"
|
||||||
|
grpc "google.golang.org/grpc"
|
||||||
|
helloworld "google.golang.org/grpc/examples/helloworld/helloworld"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Mock of GreeterClient interface
|
||||||
|
type MockGreeterClient struct {
|
||||||
|
ctrl *gomock.Controller
|
||||||
|
recorder *_MockGreeterClientRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recorder for MockGreeterClient (not exported)
|
||||||
|
type _MockGreeterClientRecorder struct {
|
||||||
|
mock *MockGreeterClient
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMockGreeterClient(ctrl *gomock.Controller) *MockGreeterClient {
|
||||||
|
mock := &MockGreeterClient{ctrl: ctrl}
|
||||||
|
mock.recorder = &_MockGreeterClientRecorder{mock}
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_m *MockGreeterClient) EXPECT() *_MockGreeterClientRecorder {
|
||||||
|
return _m.recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_m *MockGreeterClient) SayHello(_param0 context.Context, _param1 *helloworld.HelloRequest, _param2 ...grpc.CallOption) (*helloworld.HelloReply, error) {
|
||||||
|
_s := []interface{}{_param0, _param1}
|
||||||
|
for _, _x := range _param2 {
|
||||||
|
_s = append(_s, _x)
|
||||||
|
}
|
||||||
|
ret := _m.ctrl.Call(_m, "SayHello", _s...)
|
||||||
|
ret0, _ := ret[0].(*helloworld.HelloReply)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_mr *_MockGreeterClientRecorder) SayHello(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call {
|
||||||
|
_s := append([]interface{}{arg0, arg1}, arg2...)
|
||||||
|
return _mr.mock.ctrl.RecordCall(_mr.mock, "SayHello", _s...)
|
||||||
|
}
|
Reference in New Issue
Block a user