code: void teardown(final Map<String, Object> properties) {
          Throwable exceptionToThrow = null;
          final ListIterator<SetupAction> itr = setupActions.listIterator(setupActions.size());
          while (itr.hasPrevious()) {
              final SetupAction action = itr.previous();
              try {
                  action.teardown(properties);
              } catch (Throwable e) {
                  if (exceptionToThrow == null) {
                      exceptionToThrow = e;
                  }
              }
          }
          if (exceptionToThrow != null) {
              throw new RuntimeException(exceptionToThrow);
          }
      }
docs: Tears down the contexts. If an exception is thrown by a {@link SetupAction} it is wrapped and re-thrown after all
  {@link SetupAction#teardown(java.util.Map)} methods have been called.
  <p>
  Contexts are torn down in the opposite order to which they are set up (i.e. the first context set up is the last to be
  torn down).
  <p>
  If more than one teardown() method thrown an exception then only the first is propagated.