Skip to content

Commit 8abfd9c

Browse files
letsrokkbaev
authored andcommitted
handle test failures with exceptions without message (via allure-framework#183)
1 parent 25f99d9 commit 8abfd9c

6 files changed

Lines changed: 85 additions & 1 deletion

File tree

allure-java-commons/src/main/java/io/qameta/allure/util/ResultsUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ public static Optional<Status> getStatus(final Throwable throwable) {
183183
public static Optional<StatusDetails> getStatusDetails(final Throwable e) {
184184
return Optional.ofNullable(e)
185185
.map(throwable -> new StatusDetails()
186-
.withMessage(throwable.getMessage())
186+
.withMessage(Optional.ofNullable(throwable.getMessage()).orElse(throwable.getClass().getName()))
187187
.withTrace(getStackTraceAsString(throwable)));
188188
}
189189

allure-junit4/src/test/java/io/qameta/allure/junit4/FeatureCombinationsTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.qameta.allure.aspects.StepsAspects;
55
import io.qameta.allure.junit4.samples.AssumptionFailedTest;
66
import io.qameta.allure.junit4.samples.BrokenTest;
7+
import io.qameta.allure.junit4.samples.BrokenWithoutMessageTest;
78
import io.qameta.allure.junit4.samples.FailedTest;
89
import io.qameta.allure.junit4.samples.IgnoredClassTest;
910
import io.qameta.allure.junit4.samples.IgnoredTests;
@@ -114,6 +115,23 @@ public void shouldProcessBrokenTest() throws Exception {
114115
.hasSize(1)
115116
.extracting(TestResult::getStatus)
116117
.containsExactly(Status.BROKEN);
118+
assertThat(testResults.get(0).getStatusDetails())
119+
.hasFieldOrPropertyWithValue("message","Hello, everybody")
120+
.hasFieldOrProperty("trace");
121+
}
122+
123+
@Test
124+
@DisplayName("Broken test without message")
125+
public void shouldProcessBrokenWithoutMessageTest() throws Exception {
126+
core.run(Request.aClass(BrokenWithoutMessageTest.class));
127+
List<TestResult> testResults = results.getTestResults();
128+
assertThat(testResults)
129+
.hasSize(1)
130+
.extracting(TestResult::getStatus)
131+
.containsExactly(Status.BROKEN);
132+
assertThat(testResults.get(0).getStatusDetails())
133+
.hasFieldOrPropertyWithValue("message","java.lang.RuntimeException")
134+
.hasFieldOrProperty("trace");
117135
}
118136

119137
@Test
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.qameta.allure.junit4.samples;
2+
3+
import org.junit.Test;
4+
5+
/**
6+
* @author charlie (Dmitry Baev).
7+
*/
8+
public class BrokenWithoutMessageTest {
9+
10+
@Test
11+
public void brokenWithoutMessageTest() throws Exception {
12+
throw new RuntimeException();
13+
}
14+
}

allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,33 @@ public void brokenTest() {
174174
.hasFieldOrPropertyWithValue("status", Status.BROKEN)
175175
.hasFieldOrPropertyWithValue("stage", Stage.FINISHED)
176176
.hasFieldOrPropertyWithValue("name", testName);
177+
assertThat(testResult.get(0).getStatusDetails()).as("Test Status Details")
178+
.hasFieldOrPropertyWithValue("message","Exception")
179+
.hasFieldOrProperty("trace");
180+
assertThat(testResult)
181+
.flatExtracting(TestResult::getSteps)
182+
.hasSize(2)
183+
.flatExtracting(StepResult::getStatus)
184+
.contains(Status.PASSED, Status.BROKEN);
185+
}
186+
187+
@Feature("Failed tests")
188+
@Story("Broken")
189+
@Test(description = "Broken testng - Exception without message")
190+
public void brokenTestWithOutMessage() {
191+
String testName = "brokenTestWithoutMessage";
192+
runTestNgSuites("suites/brokenWithoutMessage.xml");
193+
List<TestResult> testResult = results.getTestResults();
194+
195+
assertThat(testResult).as("Test case result has not been written").hasSize(1);
196+
assertThat(testResult.get(0)).as("Unexpected broken testng property")
197+
.hasFieldOrPropertyWithValue("status", Status.BROKEN)
198+
.hasFieldOrPropertyWithValue("stage", Stage.FINISHED)
199+
.hasFieldOrPropertyWithValue("name", testName);
200+
assertThat(testResult.get(0).getStatusDetails()).as("Test Status Details")
201+
.hasFieldOrPropertyWithValue("message","java.lang.RuntimeException")
202+
.hasFieldOrProperty("trace");
203+
177204
assertThat(testResult)
178205
.flatExtracting(TestResult::getSteps)
179206
.hasSize(2)

allure-testng/src/test/java/io/qameta/allure/testng/samples/TestsWithSteps.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,19 @@ public void brokenTest() {
4848
broken();
4949
}
5050

51+
@Test
52+
public void brokenTestWithoutMessage() {
53+
stepOne();
54+
brokenWithoutMessage();
55+
}
56+
5157
@Step
5258
private void broken() {
5359
throw new RuntimeException("Exception");
5460
}
61+
62+
@Step
63+
private void brokenWithoutMessage() {
64+
throw new RuntimeException();
65+
}
5566
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
3+
4+
<suite name="Test suite with broken tests">
5+
<test name="Test Exceptions Without Message">
6+
<classes>
7+
<class name="io.qameta.allure.testng.samples.TestsWithSteps">
8+
<methods>
9+
<include name="brokenTestWithoutMessage"/>
10+
</methods>
11+
</class>
12+
</classes>
13+
</test>
14+
</suite>

0 commit comments

Comments
 (0)