public void runAssert() {
        // need to get the object we will run the assertions on.
        final Object object;
        try {
            object = callable.call();
        } catch (final Exception e) {
            final String message = (name == null) ? "Could not retrieve object." :
                    "Could not retrieve object (" + name + ").";
            final AssertionError a = new AssertionError(message);
            a.initCause(e);
            throw a;
        }

        // run through all the assertions.
        final List<AssertionError> failures = new LinkedList<AssertionError>();
        for (final Matcher entry : matchers) {
            try {
                MatcherAssert.assertThat(object, entry);
            } catch (final AssertionError e) {
                // collect all the failures
                failures.add(e);
            }
        }

        // if we have no failures we have succeeded in our assertions
        if (failures.isEmpty()) {
            return;
        }
        if (failures.size() == 1) {
            final AssertionError assertionError = failures.get(0);
            if (name == null) {
                throw assertionError;
            }

            final AssertionError a = new AssertionError(name + " failed because: " + assertionError.getMessage());
            a.initCause(assertionError);
            throw a;
        }
        // throw the combined error
        throw new MultipleAssertionError(name, failures);
    }