package org.junit.runners.model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.junit.internal.Throwables;

Collects multiple Throwables into one exception.
Since:4.9
/** * Collects multiple {@code Throwable}s into one exception. * * @since 4.9 */
public class MultipleFailureException extends Exception { private static final long serialVersionUID = 1L; /* * We have to use the f prefix until the next major release to ensure * serialization compatibility. * See https://github.com/junit-team/junit/issues/976 */ private final List<Throwable> fErrors; public MultipleFailureException(List<Throwable> errors) { this.fErrors = new ArrayList<Throwable>(errors); } public List<Throwable> getFailures() { return Collections.unmodifiableList(fErrors); } @Override public String getMessage() { StringBuilder sb = new StringBuilder( String.format("There were %d errors:", fErrors.size())); for (Throwable e : fErrors) { sb.append(String.format("\n %s(%s)", e.getClass().getName(), e.getMessage())); } return sb.toString(); }
Asserts that a list of throwables is empty. If it isn't empty, will throw MultipleFailureException (if there are multiple throwables in the list) or the first element in the list (if there is only one element).
Params:
  • errors – list to check
Throws:
  • Exception – or Error if the list is not empty
/** * Asserts that a list of throwables is empty. If it isn't empty, * will throw {@link MultipleFailureException} (if there are * multiple throwables in the list) or the first element in the list * (if there is only one element). * * @param errors list to check * @throws Exception or Error if the list is not empty */
@SuppressWarnings("deprecation") public static void assertEmpty(List<Throwable> errors) throws Exception { if (errors.isEmpty()) { return; } if (errors.size() == 1) { throw Throwables.rethrowAsException(errors.get(0)); } /* * Many places in the code are documented to throw * org.junit.internal.runners.model.MultipleFailureException. * That class now extends this one, so we throw the internal * exception in case developers have tests that catch * MultipleFailureException. */ throw new org.junit.internal.runners.model.MultipleFailureException(errors); } }