gomock

package
v0.0.0-...-188e856 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 25, 2017 License: Apache-2.0 Imports: 5 Imported by: 7

Documentation

Overview

GoMock - a mock framework for Go.

Standard usage:

(1) Define an interface that you wish to mock.
      type MyInterface interface {
        SomeMethod(x int64, y string)
      }
(2) Use mockgen to generate a mock from the interface.
(3) Use the mock in a test:
      func TestMyThing(t *testing.T) {
        mockCtrl := gomock.NewController(t)
        defer mockCtrl.Finish()

        mockObj := something.NewMockMyInterface(mockCtrl)
        mockObj.EXPECT().SomeMethod(4, "blah")
        // pass mockObj to a real object and play with it.
      }

By default, expected calls are not enforced to run in any particular order. Call order dependency can be enforced by use of InOrder and/or Call.After. Call.After can create more varied call order dependencies, but InOrder is often more convenient.

The following examples create equivalent call order dependencies.

Example of using Call.After to chain expected call order:

firstCall := mockObj.EXPECT().SomeMethod(1, "first")
secondCall := mockObj.EXPECT().SomeMethod(2, "second").After(firstCall)
mockObj.EXPECT().SomeMethod(3, "third").After(secondCall)

Example of using InOrder to declare expected call order:

gomock.InOrder(
    mockObj.EXPECT().SomeMethod(1, "first"),
    mockObj.EXPECT().SomeMethod(2, "second"),
    mockObj.EXPECT().SomeMethod(3, "third"),
)

TODO:

  • Handle different argument/return types (e.g. ..., chan, map, interface).

Index

Examples

Constants

View Source
const NoLimit = 1e8 // close enough to infinity

Variables

This section is empty.

Functions

func InOrder

func InOrder(calls ...*Call)

InOrder declares that the given calls should occur in order.

Types

type Call

type Call struct {
	// contains filtered or unexported fields
}

Call represents an expected call to a mock.

func (*Call) After

func (c *Call) After(preReq *Call) *Call

After declares that the call may only match after preReq has been exhausted.

func (*Call) AnyTimes

func (c *Call) AnyTimes() *Call

func (*Call) Do

func (c *Call) Do(f interface{}) *Call

Do declares the action to run when the call is matched. It takes an interface{} argument to support n-arity functions.

Example (Basic)
myMock.EXPECT().FunctionCall("foo", "bar", "baz").Do(
	func(arg1 string, arg2 int32, arg3 bool) {
		if arg1 != "foo" {
			t.Error("arg1 was not equal to 'foo'")
		}
	},
)
Output:

Example (ChannelSend)
// When a function you are mocking expects an argument of a channel
// which it will use to send on, you can use Do to handle the sending
myMock.EXPECT().FuncionCall("foo", gomock.Any(), "baz").Do(
	func(arg1 string, arg2 chan map[int64]bool, arg3 string) {
		arg2 <- map[int64]bool{}
	},
)
Output:

func (*Call) MaxTimes

func (c *Call) MaxTimes(n int) *Call

MaxTimes limits the number of calls to n times. If AnyTimes or MinTimes have not been called, MaxTimes also sets the minimum number of calls to 0.

func (*Call) MinTimes

func (c *Call) MinTimes(n int) *Call

MinTimes requires the call to occur at least n times. If AnyTimes or MaxTimes have not been called, MinTimes also sets the maximum number of calls to infinity.

func (*Call) Return

func (c *Call) Return(rets ...interface{}) *Call

func (*Call) SetArg

func (c *Call) SetArg(n int, value interface{}) *Call

SetArg declares an action that will set the nth argument's value, indirected through a pointer.

func (*Call) String

func (c *Call) String() string

func (*Call) Times

func (c *Call) Times(n int) *Call

func (*Call) WithinTimes

func (c *Call) WithinTimes(min, max int) *Call

WithinTimes specifies an acceptable range for the number of calls.

type Controller

type Controller struct {
	// contains filtered or unexported fields
}

A Controller represents the top-level control of a mock ecosystem. It defines the scope and lifetime of mock objects, as well as their expectations. It is safe to call Controller's methods from multiple goroutines.

func NewController

func NewController(t TestReporter) *Controller

func (*Controller) Call

func (ctrl *Controller) Call(receiver interface{}, method string, args ...interface{}) []interface{}

func (*Controller) Finish

func (ctrl *Controller) Finish()

func (*Controller) RecordCall

func (ctrl *Controller) RecordCall(receiver interface{}, method string, args ...interface{}) *Call

type Matcher

type Matcher interface {
	// Matches returns whether y is a match.
	Matches(x interface{}) bool

	// String describes what the matcher matches.
	String() string
}

A Matcher is a representation of a class of values. It is used to represent the valid or expected arguments to a mocked method.

func Any

func Any() Matcher

Constructors

func Eq

func Eq(x interface{}) Matcher

func Nil

func Nil() Matcher

func Not

func Not(x interface{}) Matcher

type TestReporter

type TestReporter interface {
	Errorf(format string, args ...interface{})
	Fatalf(format string, args ...interface{})
}

A TestReporter is something that can be used to report test failures. It is satisfied by the standard library's *testing.T.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL