Skip to content

Latest commit

 

History

History
 
 

mocking

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

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)
}