Skip to content

Commit 3f9661e

Browse files
author
Sylvain Fraïssé
committed
refact: extract a TestResultDto factory
1 parent d8bb2d2 commit 3f9661e

File tree

3 files changed

+111
-0
lines changed

3 files changed

+111
-0
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@
2626
<artifactId>commons-io</artifactId>
2727
<version>1.3.2</version>
2828
</dependency>
29+
<dependency>
30+
<groupId>org.assertj</groupId>
31+
<artifactId>assertj-core</artifactId>
32+
<version>3.6.1</version>
33+
<scope>test</scope>
34+
</dependency>
2935
</dependencies>
3036

3137
<build>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.codingame.codemachine.runner.junit;
2+
3+
import com.codingame.codemachine.runner.junit.core.RunLogDto;
4+
import com.codingame.codemachine.runner.junit.core.RunLogStackTraceDto;
5+
import com.codingame.codemachine.runner.junit.core.TestResultDto;
6+
import org.junit.runner.Description;
7+
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
import static java.util.Collections.singletonList;
12+
13+
class TestResultDtoFactory {
14+
private RunLogDto parseThrowable(Throwable t) {
15+
RunLogDto runLog = new RunLogDto();
16+
runLog.setMessage(t.getMessage());
17+
List<RunLogStackTraceDto> stack = new ArrayList<>();
18+
for (StackTraceElement item : t.getStackTrace()) {
19+
RunLogStackTraceDto stackItem = new RunLogStackTraceDto();
20+
stackItem.setLine(item.getLineNumber());
21+
stackItem.setContainer(item.getClassName());
22+
stackItem.setFunction(item.getMethodName());
23+
stack.add(stackItem);
24+
}
25+
runLog.setStacktrace(stack);
26+
27+
if (t.getCause() != null) {
28+
runLog.setCause(parseThrowable(t.getCause()));
29+
}
30+
return runLog;
31+
}
32+
33+
TestResultDto create(boolean success, Description description, Throwable t) {
34+
TestResultDto result = new TestResultDto();
35+
result.setSuccess(success);
36+
result.setNotFound(false);
37+
String testReference = description.getClassName();
38+
if (description.getMethodName() != null) {
39+
testReference += "#" + description.getMethodName();
40+
}
41+
result.setTestReference(testReference);
42+
if (t != null) {
43+
result.setLogs(singletonList(parseThrowable(t)));
44+
}
45+
return result;
46+
}
47+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.codingame.codemachine.runner.junit;
2+
3+
import com.codingame.codemachine.runner.junit.core.RunLogDto;
4+
import com.codingame.codemachine.runner.junit.core.TestResultDto;
5+
import org.junit.Test;
6+
import org.junit.runner.Description;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
public class TestResultDtoFactoryTest {
11+
12+
@Test
13+
public void should_parse_a_simple_testsuite_success() {
14+
String testCase = "com.codingame.test.MyTest";
15+
Description testDescription = Description.createSuiteDescription(testCase);
16+
TestResultDto testResultDto = new TestResultDtoFactory().create(true, testDescription, null);
17+
assertThat(testResultDto.isSuccess()).isTrue();
18+
assertThat(testResultDto.isNotFound()).isFalse();
19+
assertThat(testResultDto.getTestReference()).isEqualTo(testCase);
20+
}
21+
22+
@Test
23+
public void should_parse_a_simple_testcase_success() {
24+
String className = "com.codingame.test.MyTest";
25+
String test = "theTest";
26+
Description testDescription = Description.createTestDescription(className, test);
27+
TestResultDto testResultDto = new TestResultDtoFactory().create(true, testDescription, null);
28+
assertThat(testResultDto.isSuccess()).isTrue();
29+
assertThat(testResultDto.isNotFound()).isFalse();
30+
assertThat(testResultDto.getTestReference()).isEqualTo(className + "#" + test);
31+
}
32+
33+
@Test
34+
public void should_parse_a_simple_fail() {
35+
String testCase = "com.codingame.test.MyTest";
36+
Description testDescription = Description.createSuiteDescription(testCase);
37+
TestResultDto testResultDto = new TestResultDtoFactory().create(false, testDescription, null);
38+
assertThat(testResultDto.isSuccess()).isFalse();
39+
assertThat(testResultDto.isNotFound()).isFalse();
40+
assertThat(testResultDto.getTestReference()).isEqualTo(testCase);
41+
}
42+
43+
@Test
44+
public void should_parse_a_full_fail() {
45+
String testCase = "com.codingame.test.MyTest";
46+
Description testDescription = Description.createSuiteDescription(testCase);
47+
RuntimeException cause = new RuntimeException("Cause");
48+
TestResultDto testResultDto =
49+
new TestResultDtoFactory().create(false, testDescription, new Throwable("Problem", cause));
50+
assertThat(testResultDto.isSuccess()).isFalse();
51+
assertThat(testResultDto.isNotFound()).isFalse();
52+
assertThat(testResultDto.getTestReference()).isEqualTo(testCase);
53+
assertThat(testResultDto.getLogs()).hasSize(1);
54+
RunLogDto runLogDto = testResultDto.getLogs().get(0);
55+
assertThat(runLogDto.getMessage()).isEqualTo("Problem");
56+
assertThat(runLogDto.getCause().getMessage()).isEqualTo("Cause");
57+
}
58+
}

0 commit comments

Comments
 (0)