Skip to content

Files

Latest commit

author
Asim Aslam
Jun 19, 2018
2c8f2f0 · Jun 19, 2018

History

History
This branch is 191 commits ahead of asbubam/examples:master.

mocking

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Apr 25, 2018
Jun 19, 2018
Apr 25, 2018

Mocking

Thie example demonstrates how to mock the helloworld service

The generated protos create a Service interface used by the client. This can simply be mocked.

type GreeterService interface {
	Hello(ctx context.Context, in *HelloRequest, opts ...client.CallOption) (*HelloResponse, error)
}

Where the GreeterService is used we can instead pass in the mock which returns the expected response rather than calling a service.

Mock Client

type mockGreeterService struct {
}

func (m *mockGreeterService) Hello(ctx context.Context, req *proto.HelloRequest, opts ...client.CallOption) (*proto.HelloResponse, error) {
        return &proto.HelloResponse{
                Greeting: "Hello " + req.Name,
        }, nil
}

func NewGreeterService() proto.GreeterService {
        return new(mockGreeterService)
}

Use Mock

In the test environment we will use the mock client

func main() {
	var c proto.GreeterService

	service := micro.NewService(
		micro.Flags(cli.StringFlag{
			Name: "environment",
			Value: "testing",
		}),
	)

	service.Init(
		micro.Action(func(ctx *cli.Context) {
			env := ctx.String("environment")
			// use the mock when in testing environment
			if env == "testing" {
				c = mock.NewGreeterService()
			} else {
				c = proto.NewGreeterService("helloworld", service.Client())
			}
		}),
	)

	// call hello service
	rsp, err := c.Hello(context.TODO(), &proto.HelloRequest{
		Name: "John",
	})
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(rsp.Greeting)
}