Skip to content

Commit ebb1a42

Browse files
authored
add assertj integration, rft lifecycle, add commons test module (fixes #68, via #89)
1 parent 8ef997e commit ebb1a42

File tree

31 files changed

+319
-294
lines changed

31 files changed

+319
-294
lines changed

allure-assertj/build.gradle

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
description = 'Allure AssertJ'
2+
3+
apply from: "${gradleScriptDir}/maven-publish.gradle"
4+
apply from: "${gradleScriptDir}/bintray.gradle"
5+
apply plugin: 'maven'
6+
apply plugin: 'org.junit.platform.gradle.plugin'
7+
8+
configurations {
9+
agent
10+
}
11+
12+
dependencies {
13+
agent 'org.aspectj:aspectjweaver'
14+
15+
compile project(':allure-java-commons')
16+
compile 'org.assertj:assertj-core'
17+
18+
testCompile 'org.slf4j:slf4j-simple'
19+
testCompile('org.junit.jupiter:junit-jupiter-api')
20+
testRuntime('org.junit.jupiter:junit-jupiter-engine')
21+
testCompile project(':allure-junit5')
22+
testCompile project(':allure-java-commons-test')
23+
}
24+
25+
junitPlatform {
26+
filters {
27+
engines {
28+
include 'junit-jupiter'
29+
}
30+
includeClassNamePattern '.*Test'
31+
}
32+
enableStandardTestTask true
33+
}
34+
35+
tasks.withType(JavaExec) {
36+
if (it.name == 'junitPlatformTest') {
37+
systemProperty 'org.slf4j.simpleLogger.defaultLogLevel', 'debug'
38+
systemProperty 'allure.model.indentOutput', true
39+
systemProperty 'allure.results.directory', 'build/allure-results'
40+
doFirst {
41+
jvmArgs "-javaagent:${configurations.agent.singleFile}"
42+
}
43+
}
44+
}
45+
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package io.qameta.allure.assertj;
2+
3+
import io.qameta.allure.Allure;
4+
import io.qameta.allure.AllureLifecycle;
5+
import io.qameta.allure.model.Status;
6+
import io.qameta.allure.model.StepResult;
7+
import org.aspectj.lang.ProceedingJoinPoint;
8+
import org.aspectj.lang.annotation.Around;
9+
import org.aspectj.lang.annotation.Aspect;
10+
import org.aspectj.lang.reflect.MethodSignature;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
import java.util.Objects;
15+
import java.util.UUID;
16+
import java.util.stream.Collectors;
17+
import java.util.stream.Stream;
18+
19+
import static io.qameta.allure.util.ResultsUtils.getStatus;
20+
import static io.qameta.allure.util.ResultsUtils.getStatusDetails;
21+
22+
/**
23+
* @author charlie (Dmitry Baev).
24+
*/
25+
@SuppressWarnings("all")
26+
@Aspect
27+
public class AllureAspectJ {
28+
29+
private static final Logger LOGGER = LoggerFactory.getLogger(AllureAspectJ.class);
30+
31+
private static AllureLifecycle lifecycle;
32+
33+
@Around("execution(* org.assertj.core.api.AbstractAssert+.*(..)) "
34+
+ "|| execution(* org.assertj.core.api.Assertions.assertThat(..))")
35+
public Object step(final ProceedingJoinPoint joinPoint) throws Throwable {
36+
final MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
37+
final String name = joinPoint.getArgs().length > 0
38+
? String.format("%s \'%s\'", methodSignature.getName(), arrayToString(joinPoint.getArgs()))
39+
: methodSignature.getName();
40+
final String uuid = UUID.randomUUID().toString();
41+
final StepResult result = new StepResult()
42+
.withName(name);
43+
getLifecycle().startStep(uuid, result);
44+
try {
45+
final Object proceed = joinPoint.proceed();
46+
getLifecycle().updateStep(uuid, s -> s.withStatus(Status.PASSED));
47+
return proceed;
48+
} catch (Throwable e) {
49+
getLifecycle().updateStep(uuid, s -> s
50+
.withStatus(getStatus(e).orElse(Status.BROKEN))
51+
.withStatusDetails(getStatusDetails(e).orElse(null)));
52+
throw e;
53+
} finally {
54+
getLifecycle().stopStep(uuid);
55+
}
56+
}
57+
58+
/**
59+
* For tests only.
60+
*
61+
* @param allure allure lifecycle to set.
62+
*/
63+
public static void setLifecycle(final AllureLifecycle allure) {
64+
lifecycle = allure;
65+
}
66+
67+
public static AllureLifecycle getLifecycle() {
68+
if (Objects.isNull(lifecycle)) {
69+
lifecycle = Allure.getLifecycle();
70+
}
71+
return lifecycle;
72+
}
73+
74+
private static String arrayToString(final Object... array) {
75+
return Stream.of(array)
76+
.map(object -> {
77+
if (object.getClass().isArray()) {
78+
return arrayToString((Object[]) object);
79+
}
80+
return Objects.toString(object);
81+
})
82+
.collect(Collectors.joining(" "));
83+
}
84+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<aspectj>
2+
<aspects>
3+
<aspect name="io.qameta.allure.assertj.AllureAspectJ"/>
4+
</aspects>
5+
</aspectj>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package io.qameta.allure.assertj;
2+
3+
import io.qameta.allure.AllureLifecycle;
4+
import io.qameta.allure.model.StepResult;
5+
import io.qameta.allure.model.TestResult;
6+
import io.qameta.allure.test.AllureResultsWriterStub;
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.Test;
9+
10+
import java.util.UUID;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
14+
/**
15+
* @author charlie (Dmitry Baev).
16+
*/
17+
class AllureAspectJTest {
18+
19+
private AllureResultsWriterStub results;
20+
21+
private AllureLifecycle lifecycle;
22+
23+
@BeforeEach
24+
public void initLifecycle() {
25+
results = new AllureResultsWriterStub();
26+
lifecycle = new AllureLifecycle(results);
27+
AllureAspectJ.setLifecycle(lifecycle);
28+
}
29+
30+
@Test
31+
public void shouldCreateStepsForAsserts() throws Exception {
32+
final String uuid = UUID.randomUUID().toString();
33+
final TestResult result = new TestResult().withUuid(uuid);
34+
35+
lifecycle.scheduleTestCase(result);
36+
lifecycle.startTestCase(uuid);
37+
38+
39+
assertThat("Data")
40+
.hasSize(4);
41+
42+
lifecycle.stopTestCase(uuid);
43+
lifecycle.writeTestCase(uuid);
44+
45+
assertThat(results.getTestResults())
46+
.flatExtracting(TestResult::getSteps)
47+
.extracting(StepResult::getName)
48+
.containsExactly("assertThat 'Data'", "hasSize '4'");
49+
}
50+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
description = 'Allure Java Commons Test Utils'
2+
3+
apply from: "${gradleScriptDir}/maven-publish.gradle"
4+
apply from: "${gradleScriptDir}/bintray.gradle"
5+
apply plugin: 'maven'
6+
apply plugin: 'java'
7+
8+
configurations {
9+
agent
10+
}
11+
12+
dependencies {
13+
compile project(':allure-java-commons')
14+
}

allure-java-commons/src/test/java/io/qameta/allure/testdata/AllureResultsWriterStub.java renamed to allure-java-commons-test/src/main/java/io/qameta/allure/test/AllureResultsWriterStub.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.qameta.allure.testdata;
1+
package io.qameta.allure.test;
22

33
import io.qameta.allure.AllureResultsWriter;
44
import io.qameta.allure.model.TestResult;
@@ -8,10 +8,13 @@
88
import java.util.List;
99
import java.util.concurrent.CopyOnWriteArrayList;
1010

11+
/**
12+
* @author Egor Borisov ehborisov@gmail.com
13+
*/
1114
public class AllureResultsWriterStub implements AllureResultsWriter {
1215

13-
private List<TestResult> testResults = new CopyOnWriteArrayList<>();
14-
private List<TestResultContainer> testContainers = new CopyOnWriteArrayList<>();
16+
private final List<TestResult> testResults = new CopyOnWriteArrayList<>();
17+
private final List<TestResultContainer> testContainers = new CopyOnWriteArrayList<>();
1518

1619
public void write(final TestResult testResult) {
1720
testResults.add(testResult);

allure-java-commons/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ dependencies {
2323
testCompile 'org.slf4j:slf4j-simple'
2424
testCompile 'org.mockito:mockito-core'
2525
testCompile 'org.assertj:assertj-core'
26+
testCompile project(':allure-java-commons-test')
2627
}
2728

2829
test.doFirst {

0 commit comments

Comments
 (0)