19
19
import static org .junit .jupiter .engine .Constants .DEFAULT_TEST_METHOD_ORDER_PROPERTY_NAME ;
20
20
import static org .junit .jupiter .engine .Constants .PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME ;
21
21
import static org .junit .platform .engine .discovery .DiscoverySelectors .selectClass ;
22
+ import static org .junit .platform .launcher .LauncherConstants .CRITICAL_DISCOVERY_ISSUE_SEVERITY_PROPERTY_NAME ;
22
23
23
24
import java .lang .annotation .Annotation ;
24
25
import java .lang .reflect .Method ;
58
59
import org .junit .platform .commons .util .ClassUtils ;
59
60
import org .junit .platform .engine .DiscoveryIssue ;
60
61
import org .junit .platform .engine .DiscoveryIssue .Severity ;
62
+ import org .junit .platform .engine .support .descriptor .ClassSource ;
61
63
import org .junit .platform .engine .support .descriptor .MethodSource ;
62
64
import org .junit .platform .testkit .engine .EngineDiscoveryResults ;
63
65
import org .junit .platform .testkit .engine .EngineTestKit ;
@@ -289,35 +291,50 @@ void reportsDiscoveryIssuesForIneffectiveOrderAnnotations() throws Exception {
289
291
}
290
292
291
293
@ Test
292
- void misbehavingMethodOrdererThatAddsElements (@ TrackLogRecords LogRecordListener listener ) {
294
+ void misbehavingMethodOrdererThatAddsElements () {
293
295
Class <?> testClass = MisbehavingByAddingTestCase .class ;
294
296
295
- executeTestsInParallel (testClass , Random .class ).assertStatistics (stats -> stats .succeeded (2 ));
297
+ var discoveryIssues = discoverTests (testClass , null ).getDiscoveryIssues ();
298
+ assertThat (discoveryIssues ).hasSize (1 );
296
299
297
- assertThat (callSequence ).containsExactly ("test1()" , "test2()" );
300
+ var issue = discoveryIssues .getFirst ();
301
+ assertThat (issue .severity ()).isEqualTo (Severity .WARNING );
302
+ assertThat (issue .message ()).isEqualTo (
303
+ "MethodOrderer [%s] added 2 MethodDescriptor(s) for test class [%s] which will be ignored." ,
304
+ MisbehavingByAdding .class .getName (), testClass .getName ());
305
+ assertThat (issue .source ()).contains (ClassSource .from (testClass ));
298
306
299
- var expectedMessage = "MethodOrderer [" + MisbehavingByAdding . class . getName ()
300
- + "] added 2 MethodDescriptor(s) for test class [" + testClass . getName () + "] which will be ignored." ;
307
+ executeTestsInParallel ( testClass , null , Severity . ERROR ) //
308
+ . assertStatistics ( stats -> stats . succeeded ( 2 )) ;
301
309
302
- assertExpectedLogMessage ( listener , expectedMessage );
310
+ assertThat ( callSequence ). containsExactly ( "test1()" , "test2()" );
303
311
}
304
312
305
313
@ Test
306
- void misbehavingMethodOrdererThatImpersonatesElements (@ TrackLogRecords LogRecordListener listener ) {
314
+ void misbehavingMethodOrdererThatImpersonatesElements () {
307
315
Class <?> testClass = MisbehavingByImpersonatingTestCase .class ;
308
316
309
317
executeTestsInParallel (testClass , Random .class ).assertStatistics (stats -> stats .succeeded (2 ));
310
318
311
319
assertThat (callSequence ).containsExactlyInAnyOrder ("test1()" , "test2()" );
312
-
313
- assertThat (listener .stream (Level .WARNING )).isEmpty ();
314
320
}
315
321
316
322
@ Test
317
- void misbehavingMethodOrdererThatRemovesElements (@ TrackLogRecords LogRecordListener listener ) {
323
+ void misbehavingMethodOrdererThatRemovesElements () {
318
324
Class <?> testClass = MisbehavingByRemovingTestCase .class ;
319
325
320
- executeTestsInParallel (testClass , Random .class ).assertStatistics (stats -> stats .succeeded (4 ));
326
+ var discoveryIssues = discoverTests (testClass , null ).getDiscoveryIssues ();
327
+ assertThat (discoveryIssues ).hasSize (1 );
328
+
329
+ var issue = discoveryIssues .getFirst ();
330
+ assertThat (issue .severity ()).isEqualTo (Severity .WARNING );
331
+ assertThat (issue .message ()).isEqualTo (
332
+ "MethodOrderer [%s] removed 2 MethodDescriptor(s) for test class [%s] which will be retained with arbitrary ordering." ,
333
+ MisbehavingByRemoving .class .getName (), testClass .getName ());
334
+ assertThat (issue .source ()).contains (ClassSource .from (testClass ));
335
+
336
+ executeTestsInParallel (testClass , null , Severity .ERROR ) //
337
+ .assertStatistics (stats -> stats .succeeded (4 ));
321
338
322
339
assertThat (callSequence ) //
323
340
.containsExactlyInAnyOrder ("test1()" , "test2()" , "test3()" , "test4()" ) //
@@ -326,36 +343,29 @@ void misbehavingMethodOrdererThatRemovesElements(@TrackLogRecords LogRecordListe
326
343
.containsSubsequence ("test1()" , "test4()" ) // removed item is re-added before ordered item
327
344
.containsSubsequence ("test2()" , "test3()" ) // removed item is re-added before ordered item
328
345
.containsSubsequence ("test2()" , "test4()" );// removed item is re-added before ordered item
329
-
330
- var expectedMessage = "MethodOrderer [" + MisbehavingByRemoving .class .getName ()
331
- + "] removed 2 MethodDescriptor(s) for test class [" + testClass .getName ()
332
- + "] which will be retained with arbitrary ordering." ;
333
-
334
- assertExpectedLogMessage (listener , expectedMessage );
335
- }
336
-
337
- private void assertExpectedLogMessage (LogRecordListener listener , String expectedMessage ) {
338
- // @formatter:off
339
- assertThat (listener .stream (Level .WARNING )
340
- .map (LogRecord ::getMessage ))
341
- .contains (expectedMessage );
342
- // @formatter:on
343
346
}
344
347
345
348
private EngineDiscoveryResults discoverTests (Class <?> testClass , Class <? extends MethodOrderer > defaultOrderer ) {
346
- return testKit (testClass , defaultOrderer ).discover ();
349
+ return testKit (testClass , defaultOrderer , Severity . INFO ).discover ();
347
350
}
348
351
349
352
private Events executeTestsInParallel (Class <?> testClass , Class <? extends MethodOrderer > defaultOrderer ) {
350
- return testKit (testClass , defaultOrderer ) //
353
+ return executeTestsInParallel (testClass , defaultOrderer , Severity .INFO );
354
+ }
355
+
356
+ private Events executeTestsInParallel (Class <?> testClass , Class <? extends MethodOrderer > defaultOrderer ,
357
+ Severity criticalSeverity ) {
358
+ return testKit (testClass , defaultOrderer , criticalSeverity ) //
351
359
.execute () //
352
360
.testEvents ();
353
361
}
354
362
355
- private static EngineTestKit .Builder testKit (Class <?> testClass , Class <? extends MethodOrderer > defaultOrderer ) {
363
+ private static EngineTestKit .Builder testKit (Class <?> testClass , Class <? extends MethodOrderer > defaultOrderer ,
364
+ Severity criticalSeverity ) {
356
365
var testKit = EngineTestKit .engine ("junit-jupiter" ) //
357
366
.configurationParameter (PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME , "true" ) //
358
- .configurationParameter (DEFAULT_PARALLEL_EXECUTION_MODE , "concurrent" );
367
+ .configurationParameter (DEFAULT_PARALLEL_EXECUTION_MODE , "concurrent" ) //
368
+ .configurationParameter (CRITICAL_DISCOVERY_ISSUE_SEVERITY_PROPERTY_NAME , criticalSeverity .name ());
359
369
if (defaultOrderer != null ) {
360
370
testKit .configurationParameter (DEFAULT_TEST_METHOD_ORDER_PROPERTY_NAME , defaultOrderer .getName ());
361
371
}
0 commit comments