diff --git a/base-configuration/pom.xml b/base-configuration/pom.xml index fe27b47..83481c2 100644 --- a/base-configuration/pom.xml +++ b/base-configuration/pom.xml @@ -35,36 +35,6 @@ test - - org.mockito - mockito-core - test - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - dependency-properties - - properties - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - -XX:+EnableDynamicAgentLoading -javaagent:${org.mockito:mockito-core:jar} - - - - diff --git a/base-configuration/src/test/java/build/base/configuration/ConfigurationTests.java b/base-configuration/src/test/java/build/base/configuration/ConfigurationTests.java index 5c4f3c7..e3b57bf 100644 --- a/base-configuration/src/test/java/build/base/configuration/ConfigurationTests.java +++ b/base-configuration/src/test/java/build/base/configuration/ConfigurationTests.java @@ -10,11 +10,9 @@ import java.util.function.Supplier; import java.util.stream.Stream; +import java.util.concurrent.atomic.AtomicBoolean; + import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; /** * Tests for {@link Configuration}s. @@ -128,22 +126,19 @@ void shouldReturnSpecifiedDefaultEnumOption() { * Ensure that a provided {@link Supplier} is not invoked when an {@link Option} is present. */ @Test - @SuppressWarnings("unchecked") void shouldAvoidSupplierWhenNonNull() { final var configuration = ConfigurationBuilder.create() .add(Color.GREEN) .build(); - // establish a mock supplier for the Color.BLUE - // (so we can track interactions with the supplier) - final Supplier blueSupplier = mock(Supplier.class); - when(blueSupplier.get()).thenReturn(Color.BLUE); + final var supplierCalled = new AtomicBoolean(false); - assertThat(configuration.getOrDefault(Color.class, blueSupplier)) - .isEqualTo(Color.GREEN); + assertThat(configuration.getOrDefault(Color.class, () -> { + supplierCalled.set(true); + return Color.BLUE; + })).isEqualTo(Color.GREEN); - // ensure the supplier was never used - verify(blueSupplier, times(0)).get(); + assertThat(supplierCalled).isFalse(); } /** diff --git a/base-flow/pom.xml b/base-flow/pom.xml index 98fb334..19e80da 100644 --- a/base-flow/pom.xml +++ b/base-flow/pom.xml @@ -35,36 +35,5 @@ test - - org.mockito - mockito-core - test - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - dependency-properties - - properties - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - -XX:+EnableDynamicAgentLoading -javaagent:${org.mockito:mockito-core:jar} - - - - diff --git a/base-flow/src/test/java/build/base/flow/FilteringSubscriberTests.java b/base-flow/src/test/java/build/base/flow/FilteringSubscriberTests.java index f37aaf8..f691b8f 100644 --- a/base-flow/src/test/java/build/base/flow/FilteringSubscriberTests.java +++ b/base-flow/src/test/java/build/base/flow/FilteringSubscriberTests.java @@ -1,7 +1,6 @@ package build.base.flow; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; import static org.assertj.core.api.Assertions.assertThat; @@ -13,6 +12,11 @@ */ class FilteringSubscriberTests { + private static final Subscription NO_OP_SUBSCRIPTION = new Subscription() { + @Override public void request(final long number) {} + @Override public void cancel() {} + }; + /** * Ensure a {@link FilteringSubscriber} can be created. */ @@ -28,11 +32,10 @@ void shouldCreateAFilteringSubscriber() { @Test void shouldObserveFilteredValues() { - final var subscription = Mockito.mock(Subscription.class); final var recordingSubscriber = new RecordingSubscriber(); final var filteringObserver = FilteringSubscriber.of(s -> s.startsWith("Hello"), recordingSubscriber); - filteringObserver.onSubscribe(subscription); + filteringObserver.onSubscribe(NO_OP_SUBSCRIPTION); assertThat(recordingSubscriber.isSubscribed()) .isTrue(); @@ -71,11 +74,10 @@ void shouldObserveFilteredValues() { @Test void shouldObserveCompletionWhenFilteringSubscriberObservesCompletion() { - final var subscription = Mockito.mock(Subscription.class); final var recordingSubscriber = new RecordingSubscriber(); final var filteringObserver = FilteringSubscriber.of(s -> s.startsWith("Hello"), recordingSubscriber); - filteringObserver.onSubscribe(subscription); + filteringObserver.onSubscribe(NO_OP_SUBSCRIPTION); filteringObserver.onComplete(); @@ -89,12 +91,10 @@ void shouldObserveCompletionWhenFilteringSubscriberObservesCompletion() { @Test void shouldObserveAnErrorWhenFilteringObserverObservesAnError() { - final var subscription = Mockito.mock(Subscription.class); - final var recordingSubscriber = new RecordingSubscriber(); final var filteringObserver = FilteringSubscriber.of(s -> s.startsWith("Hello"), recordingSubscriber); - filteringObserver.onSubscribe(subscription); + filteringObserver.onSubscribe(NO_OP_SUBSCRIPTION); assertThat(recordingSubscriber.isSubscribed()) .isTrue(); diff --git a/base-flow/src/test/java/build/base/flow/MappingSubscriberTests.java b/base-flow/src/test/java/build/base/flow/MappingSubscriberTests.java index 194ef60..b791db0 100644 --- a/base-flow/src/test/java/build/base/flow/MappingSubscriberTests.java +++ b/base-flow/src/test/java/build/base/flow/MappingSubscriberTests.java @@ -1,7 +1,6 @@ package build.base.flow; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; import static org.assertj.core.api.Assertions.assertThat; @@ -13,6 +12,11 @@ */ class MappingSubscriberTests { + private static final Subscription NO_OP_SUBSCRIPTION = new Subscription() { + @Override public void request(final long number) {} + @Override public void cancel() {} + }; + /** * Ensure a {@link MappingSubscriber} can be created. */ @@ -27,11 +31,10 @@ void shouldCreateAMappingSubscriber() { @Test void shouldObserveMapValues() { - final var subscription = Mockito.mock(Subscription.class); final var recordingObserver = new RecordingSubscriber(); final var mappingObserver = MappingSubscriber.of(String::length, recordingObserver); - mappingObserver.onSubscribe(subscription); + mappingObserver.onSubscribe(NO_OP_SUBSCRIPTION); assertThat(recordingObserver.isSubscribed()) .isTrue(); @@ -59,11 +62,10 @@ void shouldObserveMapValues() { @Test void shouldObserveCompletionWhenMappingSubscriberObservesCompletion() { - final var subscription = Mockito.mock(Subscription.class); final var recordingObserver = new RecordingSubscriber(); final var mappingObserver = MappingSubscriber.of(String::length, recordingObserver); - mappingObserver.onSubscribe(subscription); + mappingObserver.onSubscribe(NO_OP_SUBSCRIPTION); mappingObserver.onComplete(); @@ -77,11 +79,10 @@ void shouldObserveCompletionWhenMappingSubscriberObservesCompletion() { @Test void shouldObserveAnErrorWhenMappingSubscriberObservesAnError() { - final var subscription = Mockito.mock(Subscription.class); final var recordingObserver = new RecordingSubscriber(); final var mappingObserver = MappingSubscriber.of(String::length, recordingObserver); - mappingObserver.onSubscribe(subscription); + mappingObserver.onSubscribe(NO_OP_SUBSCRIPTION); assertThat(recordingObserver.isSubscribed()) .isTrue(); diff --git a/base-flow/src/test/java/build/base/flow/SubscriberRegistryTests.java b/base-flow/src/test/java/build/base/flow/SubscriberRegistryTests.java index 0873ff6..7b839cc 100644 --- a/base-flow/src/test/java/build/base/flow/SubscriberRegistryTests.java +++ b/base-flow/src/test/java/build/base/flow/SubscriberRegistryTests.java @@ -1,16 +1,13 @@ package build.base.flow; import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doCallRealMethod; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; /** * Tests for {@link SubscriberRegistry}s. @@ -28,18 +25,6 @@ void shouldCreate() { new SubscriberRegistry<>(); } - /** - * Creates an unbounded mocked {@link Subscriber}. - * - * @return a {@link Subscriber} - */ - @SuppressWarnings("unchecked") - private Subscriber createUnboundedMockSubscriber() { - final Subscriber subscriber = Mockito.mock(Subscriber.class); - doCallRealMethod().when(subscriber).onSubscribe(any()); - return subscriber; - } - /** * Ensure a {@link Subscriber} can be subscribed to a {@link SubscriberRegistry}. */ @@ -47,13 +32,13 @@ private Subscriber createUnboundedMockSubscriber() { void shouldSubscribe() { final SubscriberRegistry subscriberRegistry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); + final TrackingSubscriber subscriber = new TrackingSubscriber<>(); subscriberRegistry.subscribe(subscriber); - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(0)).onNext(any()); - verify(subscriber, times(0)).onComplete(); - verify(subscriber, times(0)).onError(any()); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).isEmpty(); + assertThat(subscriber.isCompleted()).isFalse(); + assertThat(subscriber.throwable()).isEmpty(); } /** @@ -63,22 +48,20 @@ void shouldSubscribe() { void shouldCancelSubscription() { final SubscriberRegistry subscriberRegistry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); + final TrackingSubscriber subscriber = new TrackingSubscriber<>(); subscriberRegistry.subscribe(subscriber); - final ArgumentCaptor captor = ArgumentCaptor.forClass(Subscription.class); - - verify(subscriber, times(1)).onSubscribe(captor.capture()); - verify(subscriber, times(0)).onNext(any()); - verify(subscriber, times(0)).onComplete(); - verify(subscriber, times(0)).onError(any()); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).isEmpty(); + assertThat(subscriber.isCompleted()).isFalse(); + assertThat(subscriber.throwable()).isEmpty(); - captor.getValue().cancel(); + subscriber.subscription().cancel(); - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(0)).onNext(any()); - verify(subscriber, times(1)).onComplete(); - verify(subscriber, times(0)).onError(any()); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).isEmpty(); + assertThat(subscriber.isCompleted()).isTrue(); + assertThat(subscriber.throwable()).isEmpty(); } /** @@ -88,21 +71,19 @@ void shouldCancelSubscription() { void shouldObserveAnItem() { final SubscriberRegistry subscriberRegistry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); + final TrackingSubscriber subscriber = new TrackingSubscriber<>(); subscriberRegistry.subscribe(subscriber); final String message = "G'day Mate"; subscriberRegistry.publish(message); - final ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).hasSize(1); + assertThat(subscriber.isCompleted()).isFalse(); + assertThat(subscriber.throwable()).isEmpty(); - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(1)).onNext(captor.capture()); - verify(subscriber, times(0)).onComplete(); - verify(subscriber, times(0)).onError(any()); - - assertThat(captor.getValue()) + assertThat(subscriber.items().getFirst()) .isEqualTo(message); } @@ -113,15 +94,15 @@ void shouldObserveAnItem() { void shouldObserveCompletion() { final SubscriberRegistry subscriberRegistry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); + final TrackingSubscriber subscriber = new TrackingSubscriber<>(); subscriberRegistry.subscribe(subscriber); subscriberRegistry.complete(); - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(0)).onNext(any()); - verify(subscriber, times(1)).onComplete(); - verify(subscriber, times(0)).onError(any()); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).isEmpty(); + assertThat(subscriber.isCompleted()).isTrue(); + assertThat(subscriber.throwable()).isEmpty(); } /** @@ -131,21 +112,16 @@ void shouldObserveCompletion() { void shouldObserveAnError() { final SubscriberRegistry subscriberRegistry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); + final TrackingSubscriber subscriber = new TrackingSubscriber<>(); subscriberRegistry.subscribe(subscriber); final Throwable throwable = new RuntimeException("Oops!"); subscriberRegistry.error(throwable); - final ArgumentCaptor captor = ArgumentCaptor.forClass(Throwable.class); - - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(0)).onNext(any()); - verify(subscriber, times(0)).onComplete(); - verify(subscriber, times(1)).onError(captor.capture()); - - assertThat(captor.getValue()) - .isEqualTo(throwable); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).isEmpty(); + assertThat(subscriber.isCompleted()).isFalse(); + assertThat(subscriber.throwable()).contains(throwable); } /** @@ -156,21 +132,17 @@ void shouldObserveAnError() { void shouldNotObserveItemDuringSubscription() { final SubscriberRegistry subscriberRegistry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); - - doAnswer(invocation -> { - invocation.getArgument(0, Subscription.class).request(Long.MAX_VALUE); - + final TrackingSubscriber subscriber = new TrackingSubscriber<>(subscription -> { + subscription.request(Long.MAX_VALUE); subscriberRegistry.publish("Should Never See This!"); - return null; - }).when(subscriber).onSubscribe(any()); + }); subscriberRegistry.subscribe(subscriber); - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(0)).onNext(any()); - verify(subscriber, times(0)).onComplete(); - verify(subscriber, times(0)).onError(any()); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).isEmpty(); + assertThat(subscriber.isCompleted()).isFalse(); + assertThat(subscriber.throwable()).isEmpty(); } /** @@ -181,20 +153,14 @@ void shouldNotObserveItemDuringSubscription() { void shouldCancelDuringSubscription() { final SubscriberRegistry subscriberRegistry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); - - doAnswer(invocation -> { - final Subscription subscription = invocation.getArgument(0); - subscription.cancel(); - return null; - }).when(subscriber).onSubscribe(any()); + final TrackingSubscriber subscriber = new TrackingSubscriber<>(Subscription::cancel); subscriberRegistry.subscribe(subscriber); - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(0)).onNext(any()); - verify(subscriber, times(1)).onComplete(); - verify(subscriber, times(0)).onError(any()); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).isEmpty(); + assertThat(subscriber.isCompleted()).isTrue(); + assertThat(subscriber.throwable()).isEmpty(); } /** @@ -204,7 +170,7 @@ void shouldCancelDuringSubscription() { void shouldObserveItemsInOrder() { final SubscriberRegistry subscriberRegistry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); + final TrackingSubscriber subscriber = new TrackingSubscriber<>(); subscriberRegistry.subscribe(subscriber); subscriberRegistry.publish(1); @@ -212,14 +178,12 @@ void shouldObserveItemsInOrder() { subscriberRegistry.publish(3); subscriberRegistry.publish(4); - final ArgumentCaptor captor = ArgumentCaptor.forClass(Integer.class); - - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(4)).onNext(captor.capture()); - verify(subscriber, times(0)).onComplete(); - verify(subscriber, times(0)).onError(any()); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).hasSize(4); + assertThat(subscriber.isCompleted()).isFalse(); + assertThat(subscriber.throwable()).isEmpty(); - assertThat(captor.getAllValues()) + assertThat(subscriber.items()) .containsExactly(1, 2, 3, 4); } @@ -230,7 +194,7 @@ void shouldObserveItemsInOrder() { void shouldPublishAndComplete() { final SubscriberRegistry registry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); + final TrackingSubscriber subscriber = new TrackingSubscriber<>(); registry.subscribe(subscriber); final String message = "G'day Mate"; @@ -242,17 +206,15 @@ void shouldPublishAndComplete() { registry.complete(); - final ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); - - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(1)).onNext(captor.capture()); - verify(subscriber, times(1)).onComplete(); - verify(subscriber, times(0)).onError(any()); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).hasSize(1); + assertThat(subscriber.isCompleted()).isTrue(); + assertThat(subscriber.throwable()).isEmpty(); assertThat(registry.onComplete()) .isCompleted(); - assertThat(captor.getValue()) + assertThat(subscriber.items().getFirst()) .isEqualTo(message); } @@ -263,7 +225,7 @@ void shouldPublishAndComplete() { void shouldPublishAndCompleteDueToError() { final SubscriberRegistry registry = new SubscriberRegistry<>(); - final Subscriber subscriber = createUnboundedMockSubscriber(); + final TrackingSubscriber subscriber = new TrackingSubscriber<>(); registry.subscribe(subscriber); final String message = "G'day Mate"; @@ -272,39 +234,33 @@ void shouldPublishAndCompleteDueToError() { registry.publish(message); registry.error(throwable); - final ArgumentCaptor itemCaptor = ArgumentCaptor.forClass(String.class); - final ArgumentCaptor throwableCaptor = ArgumentCaptor.forClass(Throwable.class); - - verify(subscriber, times(1)).onSubscribe(any()); - verify(subscriber, times(1)).onNext(itemCaptor.capture()); - verify(subscriber, times(0)).onComplete(); - verify(subscriber, times(1)).onError(throwableCaptor.capture()); + assertThat(subscriber.subscription()).isNotNull(); + assertThat(subscriber.items()).hasSize(1); + assertThat(subscriber.isCompleted()).isFalse(); - assertThat(itemCaptor.getValue()) + assertThat(subscriber.items().getFirst()) .isEqualTo(message); - assertThat(throwableCaptor.getValue()) - .isEqualTo(throwable); + assertThat(subscriber.throwable()) + .contains(throwable); } /** * Ensure {@link SubscriberRegistry} prevents subscription once publishing has completed. */ @Test - @SuppressWarnings("unchecked") void shouldPreventSubscriptionWhenCompleted() { final SubscriberRegistry registry = new SubscriberRegistry<>(); registry.complete(); - assertThrows(IllegalStateException.class, () -> registry.subscribe(Mockito.mock(Subscriber.class))); + assertThrows(IllegalStateException.class, () -> registry.subscribe(item -> {})); } /** * Ensure {@link SubscriberRegistry} prevents subscription once publishing has completed due to a error. */ @Test - @SuppressWarnings("unchecked") void shouldPreventSubscriptionWhenError() { final SubscriberRegistry registry = new SubscriberRegistry<>(); final Throwable throwable = new RuntimeException("Oops!"); @@ -312,7 +268,7 @@ void shouldPreventSubscriptionWhenError() { registry.error(throwable); final Throwable cause = assertThrows(IllegalStateException.class, - () -> registry.subscribe(Mockito.mock(Subscriber.class))); + () -> registry.subscribe(item -> {})); assertThat(cause.getCause()) .isEqualTo(throwable); @@ -339,4 +295,66 @@ void shouldCompletedOnlyOnce() { assertThat(thirdTry) .isFalse(); } + + /** + * A {@link Subscriber} that records all interactions for assertion in tests. + */ + private static class TrackingSubscriber implements Subscriber { + + @FunctionalInterface + interface OnSubscribe { + void accept(Subscription subscription); + } + + private final List items = new ArrayList<>(); + private final OnSubscribe onSubscribeAction; + private Subscription subscription; + private Throwable throwable; + private boolean completed; + + TrackingSubscriber() { + this(s -> s.request(Long.MAX_VALUE)); + } + + TrackingSubscriber(final OnSubscribe onSubscribeAction) { + this.onSubscribeAction = onSubscribeAction; + } + + @Override + public void onSubscribe(final Subscription subscription) { + this.subscription = subscription; + this.onSubscribeAction.accept(subscription); + } + + @Override + public void onNext(final T item) { + this.items.add(item); + } + + @Override + public void onError(final Throwable throwable) { + this.throwable = throwable; + } + + @Override + public void onComplete() { + this.completed = true; + } + + Subscription subscription() { + return this.subscription; + } + + List items() { + return this.items; + } + + Optional throwable() { + return Optional.ofNullable(this.throwable); + } + + boolean isCompleted() { + return this.completed; + } + } } diff --git a/base-mereology/pom.xml b/base-mereology/pom.xml index 8ae080e..23514b7 100644 --- a/base-mereology/pom.xml +++ b/base-mereology/pom.xml @@ -40,48 +40,10 @@ test - - org.mockito - mockito-core - test - - build.base base-assertion test - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - dependency-properties - - properties - - - - - - - org.mockito:mockito-core - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - -XX:+EnableDynamicAgentLoading -javaagent:${org.mockito:mockito-core:jar} - - - - diff --git a/base-query/pom.xml b/base-query/pom.xml index 285211e..b58a59a 100644 --- a/base-query/pom.xml +++ b/base-query/pom.xml @@ -34,43 +34,5 @@ assertj-core test - - - org.mockito - mockito-core - test - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - dependency-properties - - properties - - - - - - - org.mockito:mockito-core - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - -XX:+EnableDynamicAgentLoading -javaagent:${org.mockito:mockito-core:jar} - - - - diff --git a/base-retryable/pom.xml b/base-retryable/pom.xml index 65d4527..c0cdf6e 100644 --- a/base-retryable/pom.xml +++ b/base-retryable/pom.xml @@ -44,37 +44,5 @@ assertj-core test - - - org.mockito - mockito-core - test - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - dependency-properties - - properties - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - -XX:+EnableDynamicAgentLoading -javaagent:${org.mockito:mockito-core:jar} - - - - diff --git a/base-retryable/src/test/java/build/base/retryable/BlockingRetryTests.java b/base-retryable/src/test/java/build/base/retryable/BlockingRetryTests.java index 7cf8121..42b3df6 100644 --- a/base-retryable/src/test/java/build/base/retryable/BlockingRetryTests.java +++ b/base-retryable/src/test/java/build/base/retryable/BlockingRetryTests.java @@ -10,6 +10,8 @@ import java.time.Instant; import java.util.Stack; +import java.util.concurrent.atomic.AtomicInteger; + import static build.base.retryable.ConditionallyRetryable.retrying; import static java.time.Duration.ofMillis; import static org.assertj.core.api.Assertions.assertThat; @@ -17,10 +19,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTimeout; import static org.junit.jupiter.api.Assertions.fail; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; /** * Tests for {@link BlockingRetry}. @@ -189,14 +187,14 @@ void shouldDelayRetrying() { * Ensure a {@link BlockingRetry} retries a final time after timing out */ @Test - @SuppressWarnings("unchecked") void shouldDelayRetryingFinalTime() { assertTimeout(TIMEOUT, () -> { - final Retryable retryable = mock(Retryable.class); - when(retryable.get()) - .thenThrow(new EphemeralFailureException("First Failure")) - .thenReturn(123); + final AtomicInteger calls = new AtomicInteger(); + final Retryable retryable = () -> { + if (calls.incrementAndGet() == 1) throw new EphemeralFailureException("First Failure"); + return 123; + }; final var value = BlockingRetry.retry( retryable, @@ -205,8 +203,7 @@ void shouldDelayRetryingFinalTime() { RetryFrequency.once(Duration.ofMinutes(1))); assertEquals(123, value); - - verify(retryable, times(2)).get(); + assertEquals(2, calls.get()); }); } @@ -214,17 +211,18 @@ void shouldDelayRetryingFinalTime() { * Ensure a {@link BlockingRetry} with a timeout of 0 only executes the {@link Retryable} once */ @Test - @SuppressWarnings("unchecked") void shouldRetryOnceWithZeroTimeout() { assertTimeout(TIMEOUT, () -> { - final Retryable retryable = mock(Retryable.class); - when(retryable.get()) - .thenThrow(new EphemeralFailureException("First Failure")); + final AtomicInteger calls = new AtomicInteger(); + final Retryable retryable = () -> { + calls.incrementAndGet(); + throw new EphemeralFailureException("First Failure"); + }; assertThrows(PermanentFailureException.class, () -> BlockingRetry.retry(retryable, Timeout.ofMillis(0))); - verify(retryable, times(1)).get(); + assertEquals(1, calls.get()); }); } @@ -390,29 +388,28 @@ public boolean isDone() { * laundered */ @Test - @SuppressWarnings("unchecked") void shouldRetryWhenErrorAndRuntimeExceptionsAreExperienced() { - final Retryable retryable = mock(Retryable.class); - when(retryable.isDone()).thenReturn(false); - when(retryable.get()) - .thenThrow(AssertionError.class) - .thenThrow(RuntimeException.class) - .thenThrow(Error.class); + final AtomicInteger calls = new AtomicInteger(); + final Retryable retryable = () -> { + switch (calls.incrementAndGet()) { + case 1: throw new AssertionError(); + case 2: throw new RuntimeException(); + default: throw new Error(); + } + }; assertThrows(Error.class, () -> BlockingRetry.retry(retryable)); - verify(retryable, times(3)).get(); + assertEquals(3, calls.get()); } /** * Ensure that a {@link Retryable} times out before a {@link MinimumDelay}. */ @Test - @SuppressWarnings("unchecked") void shouldTimeoutBeforeMinimumDelay() { assertTimeout(TIMEOUT, () -> { - final Retryable retryable = mock(Retryable.class); - when(retryable.get()).thenReturn(123); + final Retryable retryable = () -> 123; final int value = BlockingRetry.retry(retryable, Timeout.ofMillis(1), diff --git a/pom.xml b/pom.xml index 241e014..37c519b 100644 --- a/pom.xml +++ b/pom.xml @@ -70,7 +70,6 @@ 6.0.3 2.0.1 6.0.1 - 5.23.0 3.15.0 @@ -292,11 +291,6 @@ junit-jupiter-params ${junit.version} - - org.mockito - mockito-core - ${mockito.version} -