public function result(callable $predicate, string $description = null): self
    {
        $this->runCode();
        if (null !== $this->exception) {
            throw new AssertionFailure(
                    'Failed asserting that result '
                    . Predicate::castFrom($predicate)
                    . ' because exception of type '
                    . get_class($this->exception)
                    . ' with message "' . $this->exception->getMessage()
                    . '" was thrown.'
            );
        }

        assertThat($this->result, $predicate, $description);
        return $this;
    }