public function receive($method, $arguments)
    {
        foreach ($this->expectations as $expectation) {
            if ($expectation->matches($method, $arguments)) {
                return $expectation->perform($method, $arguments);
            }
        }
        
        // Give the expectations a chance to 'comment' on the received arguments
        $message = "Unexpected call to method $method";

        if (count($arguments)) {
            $message .= " with " . Util::printArray($arguments);
        }

        $comments = [ $message ];
        foreach ($this->expectations as $expectation) {
            $comment = $expectation->commentOn($method, $arguments);
            
            if ($comment != null) {
                $comments[] = $comment;
            }
        }
        
        throw new UnexpectedCallException(implode("\n", $comments));
    }