public static function throws(callable $callback, string $expectedException = '', string $message = '')
    {
        self::$count += 1;

        $exception = null;
        try {
            $callback();
        } catch (\Error $exception) {

        } catch (\Exception $exception) {

        }

        if ($exception === null) {
            throw new AssertionError($message ?: 'No exception thrown');
        } elseif ($expectedException && !is_a($exception, $expectedException)) {
            throw new AssertionError(
                $message ?: sprintf(
                    'Expected %s got %s',
                    $expectedException,
                    get_class($exception)
                )
            );
        }
    }