public function with()
    {
        $methodArguments = new MethodArguments();
        $this->currentWith = $methodArguments->getMethodArgumentValues(
            func_get_args(),
            $this->getClassName() . "::" . $this->currentRules[0]
        );
        foreach ($this->currentRules as $rule) {
            if ($this->rules[$rule][md5('null')]['hasSetTimes']) {
                $renderer = new ValueRenderer();
                $converter = new NumberToTimesConverter();
                $args = $renderer->renderAll($this->currentWith);
                $times = $this->rules[$rule][md5('null')]['times'];
                $convertToMethod = $converter->convertToMethod($times);
                throw new Exception(
                    sprintf(
                        "%s:\n  ->expects('%s')->with(%s)->%s",
                        "When using with you must specify expectations for each with()",
                        $rule,
                        $args,
                        $convertToMethod
                    )
                );
            }
            $this->rules[$rule][md5('null')]['times'] = -1;
        }
        $this->setupWith(
            new Action\ReturnValueAction(array(null)),
            $this->isExpecting ? 1 : -1
        );

        return $this;
    }