For black box testing expected exceptions thrown by background threads of
Geode, we'll need to add appropriate User APIs on a case-by-case basis.
Neither CatchException or AssertJ will help in this case unless there's a
way to get a reference to what was thrown.

On Fri, Aug 24, 2018 at 4:55 PM, Sai Boorlagadda <sai.boorlaga...@gmail.com>
wrote:

> Kirk, Yes I have seen this thread. But in my case,
>
> In my case, the exception is in a background thread.
> SerialGatewaySenderEventProcessor uses
> ConnectionPool to initiate and send events in the background when the test
> code does a put. So
> the test code is in not control to handle or even catch exceptions.
>
> So for a black box test (like this one) may be a tool to assert certain
> exception is logged is the only best option?
>
> On Fri, Aug 24, 2018 at 4:02 PM Kirk Lund <kl...@apache.org> wrote:
>
> > Hey Sai, did you see this thread? It might help with your exception
> > testing that you asked about. DeltaPropagationFailureRegressionTest and
> > RegisterInterestDistributedTest (mentioned below) are both dunit tests.
> >
> > On Thu, Aug 23, 2018 at 4:03 PM, Kirk Lund <kl...@apache.org> wrote:
> >
> >> I goofed on #1. We should be using* org.assertj.core.api.**Assertions*
> >> directly, not *AssertionsForClassTypes*.
> >>
> >> 1) Basic assertion about an expected exception
> >>
> >> Use: org.assertj.core.api.Assertions.assertThatThrownBy
> >>
> >> Example from JdbcWriterTest:
> >>
> >>     assertThatThrownBy(() -> writer.beforeUpdate(entryEvent))
> >>         .isInstanceOf(IllegalArgumentException.class);
> >>
> >> I'll fix JdbcWriterTest's imports. I copied the import to the email
> >> without looking closely at it.
> >>
> >> On Thu, Aug 23, 2018 at 4:01 PM, Kirk Lund <kl...@apache.org> wrote:
> >>
> >>> We have a small number of tests
> >>> using com.googlecode.catchexception.CatchException. This project
> isn't very
> >>> active and AssertJ provides better support for testing expected
> exceptions
> >>> and throwables. Most Geode developers are already using AssertJ for
> >>> expected exceptions.
> >>>
> >>> I propose we update the few tests using CatchException to instead use
> >>> AssertJ and then remove our testing dependency on CatchException.
> >>>
> >>> The recommended ways of handling expected exception testing would then
> >>> involve using following AssertJ APIs:
> >>>
> >>> 1) Basic assertion about an expected exception
> >>>
> >>> Use: org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy
> >>>
> >>> Example from JdbcWriterTest:
> >>>
> >>>     assertThatThrownBy(() -> writer.beforeUpdate(entryEvent))
> >>>         .isInstanceOf(IllegalArgumentException.class);
> >>>
> >>> 2) Complex assertion about an expected exception (potentially with many
> >>> nested causes with messages that we want to validate as well)
> >>>
> >>> Use: org.assertj.core.api.Assertions.catchThrowable
> >>>
> >>> Example from DeltaPropagationFailureRegressionTest:
> >>>
> >>>     Throwable thrown = server1.invoke(() -> catchThrowable(() ->
> >>> putDelta(FROM_DELTA)));
> >>>
> >>>     assertThat(thrown).isInstanceOf(DeltaSerializationException.class)
> >>>         .hasMessageContaining("deserializing delta
> >>> bytes").hasCauseInstanceOf(EOFException.class);
> >>>
> >>> 3) Simple assertion that an invocation should not thrown (probably used
> >>> in a regression test)
> >>>
> >>> Use: org.assertj.core.api.Assertions.assertThatCode
> >>>
> >>> Example from RegisterInterestDistributedTest:
> >>>
> >>>     assertThatCode(() ->
> >>> clientCache.readyForEvents()).doesNotThrowAnyException();
> >>>
> >>> Let me know if you can think of another use case that isn't handled by
> >>> the above AssertJ APIs.
> >>>
> >>>
> >>
> >
>

Reply via email to