@Override
  public Statement apply(Statement base, Description description) {
    return new Statement() {
      @Override
      public void evaluate() throws Throwable {
        before(description);
        List<Throwable> errors = new ArrayList<Throwable>();
        try {
          base.evaluate();
        } catch (Throwable e) {
          errors.add(e);
        } finally {
          try {
            after(description);
          } catch (Throwable e) {
            errors.add(e);
          }
        }
        MultipleFailureException.assertEmpty(errors);
      }
    };
  }
A base class for Rules that require {@code Description} to set up an external resource before
a test and tear it down afterward. {@code DescribedExternalResource} is similar to
{@code ExternalResource} but includes {@code Description} as a parameter to both {@code before}
and {@code after}.

<p>
{@code Description} allows the implementation to have access to the test class, its annotations
and information about JUnit lifecycle.
geode-junit/src/main/java/org/apache/geode/test/junit/rules/DescribedExternalResource.java