Skip to content

Commit 2deaeeb

Browse files
committed
cover parameterized tests with injectables
1 parent 89ac78e commit 2deaeeb

3 files changed

Lines changed: 218 additions & 0 deletions

File tree

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
/*
2+
* Copyright 2016-2024 Qameta Software Inc
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
*/
6+
package io.qameta.allure.junit5;
7+
8+
import io.qameta.allure.Allure;
9+
import io.qameta.allure.Param;
10+
import io.qameta.allure.junitplatform.AllureJunitPlatform;
11+
import io.qameta.allure.model.FixtureResult;
12+
import io.qameta.allure.model.Parameter;
13+
import io.qameta.allure.model.Status;
14+
import io.qameta.allure.model.StepResult;
15+
import io.qameta.allure.model.TestResult;
16+
import io.qameta.allure.model.TestResultContainer;
17+
import io.qameta.allure.test.AllureResults;
18+
import io.qameta.allure.test.RunUtils;
19+
import org.junit.jupiter.api.AfterEach;
20+
import org.junit.jupiter.api.BeforeEach;
21+
import org.junit.jupiter.api.Nested;
22+
import org.junit.jupiter.api.Tag;
23+
import org.junit.jupiter.api.Test;
24+
import org.junit.jupiter.api.extension.ExtendWith;
25+
import org.junit.platform.engine.discovery.ClassSelector;
26+
import org.junit.platform.engine.discovery.DiscoverySelectors;
27+
import org.junit.platform.launcher.Launcher;
28+
import org.junit.platform.launcher.LauncherDiscoveryRequest;
29+
import org.junit.platform.launcher.core.LauncherConfig;
30+
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
31+
import org.junit.platform.launcher.core.LauncherFactory;
32+
33+
import java.util.List;
34+
import java.util.stream.Stream;
35+
36+
import static org.assertj.core.api.Assertions.assertThat;
37+
import static org.assertj.core.api.Assertions.tuple;
38+
39+
@Tag("junit6-compat")
40+
@SuppressWarnings("unused")
41+
class AllureJunit5Junit6CompatibilityTest {
42+
43+
@ExtendWith(AllureJunit5.class)
44+
static class CompatParametersTest {
45+
46+
@org.junit.jupiter.params.ParameterizedTest
47+
@org.junit.jupiter.params.provider.ValueSource(strings = {"a", "b"})
48+
void paramTest(@Param("id") String value) {
49+
}
50+
}
51+
52+
@Nested
53+
@ExtendWith(AllureJunit5.class)
54+
class CompatFixtures {
55+
56+
@BeforeEach
57+
void setUp() {
58+
Allure.step("before step");
59+
}
60+
61+
@Test
62+
void testBody() {
63+
Allure.step("test step");
64+
}
65+
66+
@AfterEach
67+
void tearDown() {
68+
Allure.step("after step");
69+
}
70+
}
71+
72+
@Test
73+
void shouldCaptureParametersWithParamAnnotationOnJunit6() {
74+
AllureResults results = runWithLauncher(CompatParametersTest.class);
75+
76+
assertThat(results.getTestResults()).isNotEmpty();
77+
78+
List<Parameter> allParams = results.getTestResults().stream()
79+
.flatMap(tr -> tr.getParameters().stream())
80+
.toList();
81+
82+
assertThat(allParams)
83+
.isNotEmpty()
84+
.extracting(Parameter::getName, Parameter::getValue)
85+
.contains(
86+
tuple("id", "a"),
87+
tuple("id", "b")
88+
);
89+
}
90+
91+
@Test
92+
void shouldCaptureFixturesAndStepsOnJunit6() {
93+
AllureResults results = runWithLauncher(CompatFixtures.class);
94+
95+
assertThat(results.getTestResults()).hasSize(1);
96+
TestResult testResult = results.getTestResults().get(0);
97+
98+
assertThat(results.getTestResultContainers())
99+
.flatExtracting(TestResultContainer::getChildren)
100+
.contains(testResult.getUuid());
101+
102+
assertThat(results.getTestResultContainers())
103+
.flatExtracting(TestResultContainer::getBefores)
104+
.extracting(FixtureResult::getStatus)
105+
.contains(Status.PASSED);
106+
107+
assertThat(results.getTestResultContainers())
108+
.flatExtracting(TestResultContainer::getAfters)
109+
.extracting(FixtureResult::getStatus)
110+
.contains(Status.PASSED);
111+
112+
assertThat(results.getTestResultContainers())
113+
.flatExtracting(TestResultContainer::getBefores)
114+
.flatExtracting(FixtureResult::getSteps)
115+
.extracting(StepResult::getName)
116+
.contains("before step");
117+
118+
assertThat(results.getTestResults())
119+
.flatExtracting(TestResult::getSteps)
120+
.extracting(StepResult::getName)
121+
.contains("test step");
122+
123+
assertThat(results.getTestResultContainers())
124+
.flatExtracting(TestResultContainer::getAfters)
125+
.flatExtracting(FixtureResult::getSteps)
126+
.extracting(StepResult::getName)
127+
.contains("after step");
128+
}
129+
130+
@io.qameta.allure.Step("Run classes {classes}")
131+
private AllureResults runWithLauncher(Class<?>... classes) {
132+
return RunUtils.runTests(lifecycle -> {
133+
ClassSelector[] selectors = Stream.of(classes)
134+
.map(DiscoverySelectors::selectClass)
135+
.toArray(ClassSelector[]::new);
136+
137+
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
138+
.configurationParameter("junit.jupiter.extensions.autodetection.enabled", "true")
139+
.selectors(selectors)
140+
.build();
141+
142+
LauncherConfig config = LauncherConfig.builder()
143+
.enableTestExecutionListenerAutoRegistration(false)
144+
.addTestExecutionListeners(new AllureJunitPlatform(lifecycle))
145+
.build();
146+
147+
Launcher launcher = LauncherFactory.create(config);
148+
launcher.execute(request);
149+
});
150+
}
151+
}

allure-junit5/src/test/java/io/qameta/allure/junit5/AllureJunit5Test.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.qameta.allure.junit5.features.ParameterisedBlankParameterValueTests;
2626
import io.qameta.allure.junit5.features.ParameterisedPrimitivesTests;
2727
import io.qameta.allure.junit5.features.ParameterisedTests;
28+
import io.qameta.allure.junit5.features.ParameterisedWithInjectablesTests;
2829
import io.qameta.allure.junit5.features.SkipOtherInjectables;
2930
import io.qameta.allure.junitplatform.AllureJunitPlatform;
3031
import io.qameta.allure.model.FixtureResult;
@@ -181,6 +182,43 @@ void shouldSkipReportingOfTestInjectablesTestReporterForParameterisedTest() {
181182
);
182183
}
183184

185+
@Test
186+
void shouldReportParametersWhenTestHasInjectableArgument() {
187+
final AllureResults results = runClasses(ParameterisedWithInjectablesTests.class);
188+
189+
assertThat(results.getTestResults())
190+
.filteredOn("fullName", "io.qameta.allure.junit5.features.ParameterisedWithInjectablesTests.valueAndReporter")
191+
.filteredOn("name", "valueAndReporter(String, TestReporter) [1] value=a")
192+
.flatExtracting(TestResult::getParameters)
193+
.extracting(Parameter::getName, Parameter::getValue)
194+
.contains(
195+
tuple("value", "a")
196+
);
197+
198+
assertThat(results.getTestResults())
199+
.filteredOn("fullName", "io.qameta.allure.junit5.features.ParameterisedWithInjectablesTests.valueAndReporter")
200+
.filteredOn("name", "valueAndReporter(String, TestReporter) [1] value=a")
201+
.flatExtracting(TestResult::getParameters)
202+
.extracting(Parameter::getName)
203+
.doesNotContain("testReporter");
204+
205+
assertThat(results.getTestResults())
206+
.filteredOn("fullName", "io.qameta.allure.junit5.features.ParameterisedWithInjectablesTests.valueAndReporter")
207+
.filteredOn("name", "valueAndReporter(String, TestReporter) [2] value=b")
208+
.flatExtracting(TestResult::getParameters)
209+
.extracting(Parameter::getName, Parameter::getValue)
210+
.contains(
211+
tuple("value", "b")
212+
);
213+
214+
assertThat(results.getTestResults())
215+
.filteredOn("fullName", "io.qameta.allure.junit5.features.ParameterisedWithInjectablesTests.valueAndReporter")
216+
.filteredOn("name", "valueAndReporter(String, TestReporter) [2] value=b")
217+
.flatExtracting(TestResult::getParameters)
218+
.extracting(Parameter::getName)
219+
.doesNotContain("testReporter");
220+
}
221+
184222
@Test
185223
void shouldSupportBeforeEachFixture() {
186224
final AllureResults results = runClasses(EachFixtureSupport.class);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright 2016-2026 Qameta Software Inc
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.qameta.allure.junit5.features;
17+
18+
import org.junit.jupiter.api.TestReporter;
19+
import org.junit.jupiter.params.ParameterizedTest;
20+
import org.junit.jupiter.params.provider.ValueSource;
21+
22+
public class ParameterisedWithInjectablesTests {
23+
24+
@ParameterizedTest
25+
@ValueSource(strings = {"a", "b"})
26+
void valueAndReporter(final String value, final TestReporter testReporter) {
27+
testReporter.publishEntry("value", value);
28+
}
29+
}

0 commit comments

Comments
 (0)