Last active
February 10, 2022 16:00
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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