Skip to content

Instantly share code, notes, and snippets.

@sammy8806
Last active February 10, 2022 16:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sammy8806/6538a3159470fc0c36ef68aee3731530 to your computer and use it in GitHub Desktop.
Save sammy8806/6538a3159470fc0c36ef68aee3731530 to your computer and use it in GitHub Desktop.
Proof of concept for having concurrent and linear tests alike in JUnit 5
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.parallel.Execution;
import org.junit.jupiter.api.parallel.ExecutionMode;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.Alphanumeric.class)
@Execution(ExecutionMode.SAME_THREAD)
public class SubclassConTest {
boolean impulsDone = false;
boolean propertyDone = false;
static Iterable<List<String>> generateImpulses() {
List<List<String>> retVal = new ArrayList<>();
for (int i = 0; i < 10; i++) {
List<String> innerList = new ArrayList<>();
for (int j = 0; j < 200; j++) {
innerList.add("imp_" + i + "_" + j);
}
retVal.add(innerList);
}
return retVal;
}
static Iterable<List<String>> generateProperties() {
List<List<String>> retVal = new ArrayList<>();
for (int i = 0; i < 10; i++) {
List<String> innerList = new ArrayList<>();
for (int j = 0; j < 200; j++) {
innerList.add("prop_" + i + "_" + j);
}
retVal.add(innerList);
}
return retVal;
}
@Nested
@Execution(ExecutionMode.SAME_THREAD)
class Import {
@Nested
@Execution(ExecutionMode.CONCURRENT)
class QueryStuff {
@Test
void testUntilEverythingDone() throws InterruptedException {
while (!impulsDone && !propertyDone) {
System.out.println("[Query] Waiting ...");
Thread.sleep(500);
}
}
}
@Nested
@Execution(ExecutionMode.CONCURRENT)
class ImpulsStuff {
@Nested
@Execution(ExecutionMode.SAME_THREAD)
class After {
@Test
void shouldPublishImpulses() throws InterruptedException {
System.out.println("[Impuls:publish] Start");
Thread.sleep(5000);
impulsDone = true;
System.out.println("[Impuls:publish] End");
}
}
@Nested
@Execution(ExecutionMode.SAME_THREAD)
class Do {
@Execution(ExecutionMode.CONCURRENT)
@ParameterizedTest
@MethodSource("SubclassConTest#generateImpulses")
void shouldGenerateImpulses(List<String> list) throws InterruptedException {
System.out.println("Found impuls ids #" + list.size());
Thread.sleep(5000);
}
}
}
@Nested
@Execution(ExecutionMode.SAME_THREAD)
class PropertyStuff {
@Nested
class After {
@Test
void shouldPublishProperties() throws InterruptedException {
System.out.println("[Properties:publish] Start");
Thread.sleep(5000);
propertyDone = true;
System.out.println("[Properties:publish] End");
}
}
@Nested
class Do {
@Execution(ExecutionMode.CONCURRENT)
@ParameterizedTest
@MethodSource("SubclassConTest#generateProperties")
void shouldGenerateProperties(List<String> list) throws InterruptedException {
System.out.println("[Properties:Batch] Found impuls ids #" + list.size());
Thread.sleep(3000);
}
}
}
}
@Nested
@Execution(ExecutionMode.SAME_THREAD)
class Pre {
@Test
@Order(5)
void shouldGenerateImpulsGruppe() throws InterruptedException {
System.out.println("[Pre:GruppenGenerate] Start");
Thread.sleep(5000);
System.out.println("[Pre:GruppenGenerate] End");
}
}
}
48.19 s
SubclassConTest: 24 total, 24 passed
48.19 s
SubclassConTest
5.02 s
Pre
5.02 s
passed
shouldGenerateImpulsGruppe()
43.17 s
Import
14.13 s
PropertyStuff
12.12 s
Do
12.12 s
shouldGenerateProperties(List)
3.02 s
passed
[1] [prop_0_0, prop_0_1, prop_0_2, prop_0_3, prop_0_4, prop_0_5, prop_0_6, prop_0_7, prop_0_8, prop_0_9, prop_0_10, prop_0_11, prop_0_12, prop_0_13, prop_0_14, prop_0_15, prop_0_16, prop_0_17, prop_0_18, prop_0_19, prop_0_20, prop_0_21, prop_0_22, prop_0_23, prop_0_24, prop_0_25, prop_0_26, prop_0_27, prop_0_28, prop_0_29, prop_0_30, prop_0_31, prop_0_32, prop_0_33, prop_0_34, prop_0_35, prop_0_36, prop_0_37, prop_0_38, prop_0_39, prop_0_40, prop_0_41, prop_0_42, prop_0_43, prop_0_44, prop_0_45, prop_0_46, pro…
3.02 s
passed
[7] [prop_6_0, prop_6_1, prop_6_2, prop_6_3, prop_6_4, prop_6_5, prop_6_6, prop_6_7, prop_6_8, prop_6_9, prop_6_10, prop_6_11, prop_6_12, prop_6_13, prop_6_14, prop_6_15, prop_6_16, prop_6_17, prop_6_18, prop_6_19, prop_6_20, prop_6_21, prop_6_22, prop_6_23, prop_6_24, prop_6_25, prop_6_26, prop_6_27, prop_6_28, prop_6_29, prop_6_30, prop_6_31, prop_6_32, prop_6_33, prop_6_34, prop_6_35, prop_6_36, prop_6_37, prop_6_38, prop_6_39, prop_6_40, prop_6_41, prop_6_42, prop_6_43, prop_6_44, prop_6_45, prop_6_46, pro…
992 ms
passed
[2] [prop_1_0, prop_1_1, prop_1_2, prop_1_3, prop_1_4, prop_1_5, prop_1_6, prop_1_7, prop_1_8, prop_1_9, prop_1_10, prop_1_11, prop_1_12, prop_1_13, prop_1_14, prop_1_15, prop_1_16, prop_1_17, prop_1_18, prop_1_19, prop_1_20, prop_1_21, prop_1_22, prop_1_23, prop_1_24, prop_1_25, prop_1_26, prop_1_27, prop_1_28, prop_1_29, prop_1_30, prop_1_31, prop_1_32, prop_1_33, prop_1_34, prop_1_35, prop_1_36, prop_1_37, prop_1_38, prop_1_39, prop_1_40, prop_1_41, prop_1_42, prop_1_43, prop_1_44, prop_1_45, prop_1_46, pro…
15 ms
passed
[9] [prop_8_0, prop_8_1, prop_8_2, prop_8_3, prop_8_4, prop_8_5, prop_8_6, prop_8_7, prop_8_8, prop_8_9, prop_8_10, prop_8_11, prop_8_12, prop_8_13, prop_8_14, prop_8_15, prop_8_16, prop_8_17, prop_8_18, prop_8_19, prop_8_20, prop_8_21, prop_8_22, prop_8_23, prop_8_24, prop_8_25, prop_8_26, prop_8_27, prop_8_28, prop_8_29, prop_8_30, prop_8_31, prop_8_32, prop_8_33, prop_8_34, prop_8_35, prop_8_36, prop_8_37, prop_8_38, prop_8_39, prop_8_40, prop_8_41, prop_8_42, prop_8_43, prop_8_44, prop_8_45, prop_8_46, pro…
2.00 s
passed
[3] [prop_2_0, prop_2_1, prop_2_2, prop_2_3, prop_2_4, prop_2_5, prop_2_6, prop_2_7, prop_2_8, prop_2_9, prop_2_10, prop_2_11, prop_2_12, prop_2_13, prop_2_14, prop_2_15, prop_2_16, prop_2_17, prop_2_18, prop_2_19, prop_2_20, prop_2_21, prop_2_22, prop_2_23, prop_2_24, prop_2_25, prop_2_26, prop_2_27, prop_2_28, prop_2_29, prop_2_30, prop_2_31, prop_2_32, prop_2_33, prop_2_34, prop_2_35, prop_2_36, prop_2_37, prop_2_38, prop_2_39, prop_2_40, prop_2_41, prop_2_42, prop_2_43, prop_2_44, prop_2_45, prop_2_46, pro…
993 ms
passed
[4] [prop_3_0, prop_3_1, prop_3_2, prop_3_3, prop_3_4, prop_3_5, prop_3_6, prop_3_7, prop_3_8, prop_3_9, prop_3_10, prop_3_11, prop_3_12, prop_3_13, prop_3_14, prop_3_15, prop_3_16, prop_3_17, prop_3_18, prop_3_19, prop_3_20, prop_3_21, prop_3_22, prop_3_23, prop_3_24, prop_3_25, prop_3_26, prop_3_27, prop_3_28, prop_3_29, prop_3_30, prop_3_31, prop_3_32, prop_3_33, prop_3_34, prop_3_35, prop_3_36, prop_3_37, prop_3_38, prop_3_39, prop_3_40, prop_3_41, prop_3_42, prop_3_43, prop_3_44, prop_3_45, prop_3_46, pro…
14 ms
passed
[6] [prop_5_0, prop_5_1, prop_5_2, prop_5_3, prop_5_4, prop_5_5, prop_5_6, prop_5_7, prop_5_8, prop_5_9, prop_5_10, prop_5_11, prop_5_12, prop_5_13, prop_5_14, prop_5_15, prop_5_16, prop_5_17, prop_5_18, prop_5_19, prop_5_20, prop_5_21, prop_5_22, prop_5_23, prop_5_24, prop_5_25, prop_5_26, prop_5_27, prop_5_28, prop_5_29, prop_5_30, prop_5_31, prop_5_32, prop_5_33, prop_5_34, prop_5_35, prop_5_36, prop_5_37, prop_5_38, prop_5_39, prop_5_40, prop_5_41, prop_5_42, prop_5_43, prop_5_44, prop_5_45, prop_5_46, pro…
1.03 s
passed
[5] [prop_4_0, prop_4_1, prop_4_2, prop_4_3, prop_4_4, prop_4_5, prop_4_6, prop_4_7, prop_4_8, prop_4_9, prop_4_10, prop_4_11, prop_4_12, prop_4_13, prop_4_14, prop_4_15, prop_4_16, prop_4_17, prop_4_18, prop_4_19, prop_4_20, prop_4_21, prop_4_22, prop_4_23, prop_4_24, prop_4_25, prop_4_26, prop_4_27, prop_4_28, prop_4_29, prop_4_30, prop_4_31, prop_4_32, prop_4_33, prop_4_34, prop_4_35, prop_4_36, prop_4_37, prop_4_38, prop_4_39, prop_4_40, prop_4_41, prop_4_42, prop_4_43, prop_4_44, prop_4_45, prop_4_46, pro…
997 ms
passed
[8] [prop_7_0, prop_7_1, prop_7_2, prop_7_3, prop_7_4, prop_7_5, prop_7_6, prop_7_7, prop_7_8, prop_7_9, prop_7_10, prop_7_11, prop_7_12, prop_7_13, prop_7_14, prop_7_15, prop_7_16, prop_7_17, prop_7_18, prop_7_19, prop_7_20, prop_7_21, prop_7_22, prop_7_23, prop_7_24, prop_7_25, prop_7_26, prop_7_27, prop_7_28, prop_7_29, prop_7_30, prop_7_31, prop_7_32, prop_7_33, prop_7_34, prop_7_35, prop_7_36, prop_7_37, prop_7_38, prop_7_39, prop_7_40, prop_7_41, prop_7_42, prop_7_43, prop_7_44, prop_7_45, prop_7_46, pro…
30 ms
passed
[10] [prop_9_0, prop_9_1, prop_9_2, prop_9_3, prop_9_4, prop_9_5, prop_9_6, prop_9_7, prop_9_8, prop_9_9, prop_9_10, prop_9_11, prop_9_12, prop_9_13, prop_9_14, prop_9_15, prop_9_16, prop_9_17, prop_9_18, prop_9_19, prop_9_20, prop_9_21, prop_9_22, prop_9_23, prop_9_24, prop_9_25, prop_9_26, prop_9_27, prop_9_28, prop_9_29, prop_9_30, prop_9_31, prop_9_32, prop_9_33, prop_9_34, prop_9_35, prop_9_36, prop_9_37, prop_9_38, prop_9_39, prop_9_40, prop_9_41, prop_9_42, prop_9_43, prop_9_44, prop_9_45, prop_9_46, pro…
2.01 s
After
2.01 s
passed
shouldPublishProperties()
26.93 s
ImpulsStuff
21.93 s
Do
21.93 s
shouldGenerateImpulses(List)
2.00 s
passed
[1] [imp_0_0, imp_0_1, imp_0_2, imp_0_3, imp_0_4, imp_0_5, imp_0_6, imp_0_7, imp_0_8, imp_0_9, imp_0_10, imp_0_11, imp_0_12, imp_0_13, imp_0_14, imp_0_15, imp_0_16, imp_0_17, imp_0_18, imp_0_19, imp_0_20, imp_0_21, imp_0_22, imp_0_23, imp_0_24, imp_0_25, imp_0_26, imp_0_27, imp_0_28, imp_0_29, imp_0_30, imp_0_31, imp_0_32, imp_0_33, imp_0_34, imp_0_35, imp_0_36, imp_0_37, imp_0_38, imp_0_39, imp_0_40, imp_0_41, imp_0_42, imp_0_43, imp_0_44, imp_0_45, imp_0_46, imp_0_47, imp_0_48, imp_0_49, imp_0_50, imp_0_51, …
2.00 s
passed
[7] [imp_6_0, imp_6_1, imp_6_2, imp_6_3, imp_6_4, imp_6_5, imp_6_6, imp_6_7, imp_6_8, imp_6_9, imp_6_10, imp_6_11, imp_6_12, imp_6_13, imp_6_14, imp_6_15, imp_6_16, imp_6_17, imp_6_18, imp_6_19, imp_6_20, imp_6_21, imp_6_22, imp_6_23, imp_6_24, imp_6_25, imp_6_26, imp_6_27, imp_6_28, imp_6_29, imp_6_30, imp_6_31, imp_6_32, imp_6_33, imp_6_34, imp_6_35, imp_6_36, imp_6_37, imp_6_38, imp_6_39, imp_6_40, imp_6_41, imp_6_42, imp_6_43, imp_6_44, imp_6_45, imp_6_46, imp_6_47, imp_6_48, imp_6_49, imp_6_50, imp_6_51, …
977 ms
passed
[8] [imp_7_0, imp_7_1, imp_7_2, imp_7_3, imp_7_4, imp_7_5, imp_7_6, imp_7_7, imp_7_8, imp_7_9, imp_7_10, imp_7_11, imp_7_12, imp_7_13, imp_7_14, imp_7_15, imp_7_16, imp_7_17, imp_7_18, imp_7_19, imp_7_20, imp_7_21, imp_7_22, imp_7_23, imp_7_24, imp_7_25, imp_7_26, imp_7_27, imp_7_28, imp_7_29, imp_7_30, imp_7_31, imp_7_32, imp_7_33, imp_7_34, imp_7_35, imp_7_36, imp_7_37, imp_7_38, imp_7_39, imp_7_40, imp_7_41, imp_7_42, imp_7_43, imp_7_44, imp_7_45, imp_7_46, imp_7_47, imp_7_48, imp_7_49, imp_7_50, imp_7_51, …
1.98 s
passed
[2] [imp_1_0, imp_1_1, imp_1_2, imp_1_3, imp_1_4, imp_1_5, imp_1_6, imp_1_7, imp_1_8, imp_1_9, imp_1_10, imp_1_11, imp_1_12, imp_1_13, imp_1_14, imp_1_15, imp_1_16, imp_1_17, imp_1_18, imp_1_19, imp_1_20, imp_1_21, imp_1_22, imp_1_23, imp_1_24, imp_1_25, imp_1_26, imp_1_27, imp_1_28, imp_1_29, imp_1_30, imp_1_31, imp_1_32, imp_1_33, imp_1_34, imp_1_35, imp_1_36, imp_1_37, imp_1_38, imp_1_39, imp_1_40, imp_1_41, imp_1_42, imp_1_43, imp_1_44, imp_1_45, imp_1_46, imp_1_47, imp_1_48, imp_1_49, imp_1_50, imp_1_51, …
961 ms
passed
[10] [imp_9_0, imp_9_1, imp_9_2, imp_9_3, imp_9_4, imp_9_5, imp_9_6, imp_9_7, imp_9_8, imp_9_9, imp_9_10, imp_9_11, imp_9_12, imp_9_13, imp_9_14, imp_9_15, imp_9_16, imp_9_17, imp_9_18, imp_9_19, imp_9_20, imp_9_21, imp_9_22, imp_9_23, imp_9_24, imp_9_25, imp_9_26, imp_9_27, imp_9_28, imp_9_29, imp_9_30, imp_9_31, imp_9_32, imp_9_33, imp_9_34, imp_9_35, imp_9_36, imp_9_37, imp_9_38, imp_9_39, imp_9_40, imp_9_41, imp_9_42, imp_9_43, imp_9_44, imp_9_45, imp_9_46, imp_9_47, imp_9_48, imp_9_49, imp_9_50, imp_9_51, …
2.03 s
passed
[3] [imp_2_0, imp_2_1, imp_2_2, imp_2_3, imp_2_4, imp_2_5, imp_2_6, imp_2_7, imp_2_8, imp_2_9, imp_2_10, imp_2_11, imp_2_12, imp_2_13, imp_2_14, imp_2_15, imp_2_16, imp_2_17, imp_2_18, imp_2_19, imp_2_20, imp_2_21, imp_2_22, imp_2_23, imp_2_24, imp_2_25, imp_2_26, imp_2_27, imp_2_28, imp_2_29, imp_2_30, imp_2_31, imp_2_32, imp_2_33, imp_2_34, imp_2_35, imp_2_36, imp_2_37, imp_2_38, imp_2_39, imp_2_40, imp_2_41, imp_2_42, imp_2_43, imp_2_44, imp_2_45, imp_2_46, imp_2_47, imp_2_48, imp_2_49, imp_2_50, imp_2_51, …
1.98 s
passed
[4] [imp_3_0, imp_3_1, imp_3_2, imp_3_3, imp_3_4, imp_3_5, imp_3_6, imp_3_7, imp_3_8, imp_3_9, imp_3_10, imp_3_11, imp_3_12, imp_3_13, imp_3_14, imp_3_15, imp_3_16, imp_3_17, imp_3_18, imp_3_19, imp_3_20, imp_3_21, imp_3_22, imp_3_23, imp_3_24, imp_3_25, imp_3_26, imp_3_27, imp_3_28, imp_3_29, imp_3_30, imp_3_31, imp_3_32, imp_3_33, imp_3_34, imp_3_35, imp_3_36, imp_3_37, imp_3_38, imp_3_39, imp_3_40, imp_3_41, imp_3_42, imp_3_43, imp_3_44, imp_3_45, imp_3_46, imp_3_47, imp_3_48, imp_3_49, imp_3_50, imp_3_51, …
2.01 s
passed
[5] [imp_4_0, imp_4_1, imp_4_2, imp_4_3, imp_4_4, imp_4_5, imp_4_6, imp_4_7, imp_4_8, imp_4_9, imp_4_10, imp_4_11, imp_4_12, imp_4_13, imp_4_14, imp_4_15, imp_4_16, imp_4_17, imp_4_18, imp_4_19, imp_4_20, imp_4_21, imp_4_22, imp_4_23, imp_4_24, imp_4_25, imp_4_26, imp_4_27, imp_4_28, imp_4_29, imp_4_30, imp_4_31, imp_4_32, imp_4_33, imp_4_34, imp_4_35, imp_4_36, imp_4_37, imp_4_38, imp_4_39, imp_4_40, imp_4_41, imp_4_42, imp_4_43, imp_4_44, imp_4_45, imp_4_46, imp_4_47, imp_4_48, imp_4_49, imp_4_50, imp_4_51, …
2.97 s
passed
[9] [imp_8_0, imp_8_1, imp_8_2, imp_8_3, imp_8_4, imp_8_5, imp_8_6, imp_8_7, imp_8_8, imp_8_9, imp_8_10, imp_8_11, imp_8_12, imp_8_13, imp_8_14, imp_8_15, imp_8_16, imp_8_17, imp_8_18, imp_8_19, imp_8_20, imp_8_21, imp_8_22, imp_8_23, imp_8_24, imp_8_25, imp_8_26, imp_8_27, imp_8_28, imp_8_29, imp_8_30, imp_8_31, imp_8_32, imp_8_33, imp_8_34, imp_8_35, imp_8_36, imp_8_37, imp_8_38, imp_8_39, imp_8_40, imp_8_41, imp_8_42, imp_8_43, imp_8_44, imp_8_45, imp_8_46, imp_8_47, imp_8_48, imp_8_49, imp_8_50, imp_8_51, …
5.01 s
passed
[6] [imp_5_0, imp_5_1, imp_5_2, imp_5_3, imp_5_4, imp_5_5, imp_5_6, imp_5_7, imp_5_8, imp_5_9, imp_5_10, imp_5_11, imp_5_12, imp_5_13, imp_5_14, imp_5_15, imp_5_16, imp_5_17, imp_5_18, imp_5_19, imp_5_20, imp_5_21, imp_5_22, imp_5_23, imp_5_24, imp_5_25, imp_5_26, imp_5_27, imp_5_28, imp_5_29, imp_5_30, imp_5_31, imp_5_32, imp_5_33, imp_5_34, imp_5_35, imp_5_36, imp_5_37, imp_5_38, imp_5_39, imp_5_40, imp_5_41, imp_5_42, imp_5_43, imp_5_44, imp_5_45, imp_5_46, imp_5_47, imp_5_48, imp_5_49, imp_5_50, imp_5_51, …
5.00 s
After
5.00 s
passed
shouldPublishImpulses()
2.11 s
QueryStuff
2.11 s
passed
testUntilEverythingDone()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment