def returns_fake(self, *args, **kwargs):
        """Set the last call to return a new :class:`fudge.Fake`.

        Any given arguments are passed to the :class:`fudge.Fake` constructor

        Take note that this is different from the cascading nature of
        other methods.  This will return an instance of the *new* Fake,
        not self, so you should be careful to store its return value in a new
        variable.

        I.E.::

            >>> session = Fake('session')
            >>> query = session.provides('query').returns_fake(name="Query")
            >>> assert query is not session
            >>> query = query.provides('one').returns(['object'])

            >>> session.query().one()
            ['object']

        """
        exp = self._get_current_call()
        endpoint = kwargs.get('name', exp.call_name)
        name = self._endpoint_name(endpoint)
        kwargs['name'] = '%s()' % name
        fake = self.__class__(*args, **kwargs)
        exp.return_val = fake
        return fake