code: func newCall(t TestHelper, receiver interface{}, method string, methodType reflect.Type, args ...interface{}) *Call {
  	t.Helper()
  
  	// TODO: check arity, types.
  	margs := make([]Matcher, len(args))
  	for i, arg := range args {
  		if m, ok := arg.(Matcher); ok {
  			margs[i] = m
  		} else if arg == nil {
  			// Handle nil specially so that passing a nil interface value
  			// will match the typed nils of concrete args.
  			margs[i] = Nil()
  		} else {
  			margs[i] = Eq(arg)
  		}
  	}
  
  	origin := callerInfo(3)
  	actions := []func([]interface{}) []interface{}{func([]interface{}) []interface{} {
  		// Synthesize the zero value for each of the return args' types.
  		rets := make([]interface{}, methodType.NumOut())
  		for i := 0; i < methodType.NumOut(); i++ {
  			rets[i] = reflect.Zero(methodType.Out(i)).Interface()
  		}
  		return rets
  	}}
  	return &Call{t: t, receiver: receiver, method: method, methodType: methodType,
  		args: margs, origin: origin, minCalls: 1, maxCalls: 1, actions: actions}
  }
docs: // newCall creates a *Call. It requires the method type in order to support
  // unexported methods.