@Override
  public void startAsync() throws Exception {
    doAction(Executable::startAsync);
  }
@Test
  public void shouldSuppressExceptions() throws Exception {
    // Given:
    doThrow(new RuntimeException("danger executable1!")).when(executable1).startAsync();
    doThrow(new RuntimeException("danger executable2!")).when(executable2).startAsync();

    // When:
    final Exception e = assertThrows(
        Exception.class,
        () -> multiExecutable.startAsync()
    );

    // Then:
    assertThat(e.getMessage(), containsString("danger executable1!"));
    assertThat(e, new BaseMatcher<Exception>() {
      @Override
      public void describeTo(final Description description) {
      }

      @Override
      public boolean matches(final Object o) {
        return o instanceof Exception
            && ((Exception) o).getSuppressed()[0].getMessage().equals("danger executable2!");
      }
    });
  }