code: func (c *Call) Return(rets ...interface{}) *Call {
  	c.t.Helper()
  
  	mt := c.methodType
  	if len(rets) != mt.NumOut() {
  		c.t.Fatalf("wrong number of arguments to Return for %T.%v: got %d, want %d [%s]",
  			c.receiver, c.method, len(rets), mt.NumOut(), c.origin)
  	}
  	for i, ret := range rets {
  		if got, want := reflect.TypeOf(ret), mt.Out(i); got == want {
  			// Identical types; nothing to do.
  		} else if got == nil {
  			// Nil needs special handling.
  			switch want.Kind() {
  			case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
  				// ok
  			default:
  				c.t.Fatalf("argument %d to Return for %T.%v is nil, but %v is not nillable [%s]",
  					i, c.receiver, c.method, want, c.origin)
  			}
  		} else if got.AssignableTo(want) {
  			// Assignable type relation. Make the assignment now so that the generated code
  			// can return the values with a type assertion.
  			v := reflect.New(want).Elem()
  			v.Set(reflect.ValueOf(ret))
  			rets[i] = v.Interface()
  		} else {
  			c.t.Fatalf("wrong type of argument %d to Return for %T.%v: %v is not assignable to %v [%s]",
  				i, c.receiver, c.method, got, want, c.origin)
  		}
  	}
  
  	c.addAction(func([]interface{}) []interface{} {
  		return rets
  	})
  
  	return c
  }
docs: // Return declares the values to be returned by the mocked function call.