diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/SpanDataAssert.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/SpanDataAssert.java index dc3ec9fa48c..9559e0e2927 100644 --- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/SpanDataAssert.java +++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/SpanDataAssert.java @@ -375,19 +375,28 @@ public SpanDataAssert hasAttributesSatisfyingExactly(Iterable event.getName().equals(EXCEPTION_EVENT_NAME)) .findFirst() .orElse(null); + if (exception == null) { + if (exceptionEvent != null) { + failWithMessage( + "Expected span [%s] to have no exception event but had <%s>", + actual.getName(), exceptionEvent); + } + return this; + } + if (exceptionEvent == null) { failWithMessage( "Expected span [%s] to have an exception event but only had events <%s>", diff --git a/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/TraceAssertionsTest.java b/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/TraceAssertionsTest.java index feb5eb9462a..80d8800a38c 100644 --- a/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/TraceAssertionsTest.java +++ b/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/TraceAssertionsTest.java @@ -301,6 +301,8 @@ void passing() { assertThat(RESOURCE.getAttributes()) .containsOnly(entry(DOG, "bark"), entry(AttributeKey.booleanKey("dog is cute"), true)); + + assertThat(buildTestSpan(SPAN_ID1, "span")).hasException(null); } @Test @@ -564,6 +566,8 @@ void failure() { assertThatThrownBy( () -> assertThat(SPAN1).hasException(new IllegalArgumentException("good argument"))) .isInstanceOf(AssertionError.class); + assertThatThrownBy(() -> assertThat(SPAN1).hasException(null)) + .isInstanceOf(AssertionError.class); assertThatThrownBy(() -> assertThat(SPAN1).hasLinks()).isInstanceOf(AssertionError.class); assertThatThrownBy(() -> assertThat(SPAN1).hasLinks(Collections.emptyList())) .isInstanceOf(AssertionError.class);