21
21
import java .lang .annotation .Retention ;
22
22
import java .lang .annotation .RetentionPolicy ;
23
23
import java .lang .annotation .Target ;
24
- import java .lang .reflect .Method ;
25
24
import java .time .Duration ;
26
25
import java .time .Instant ;
27
26
import java .time .ZoneId ;
32
31
import java .util .Properties ;
33
32
import java .util .concurrent .TimeUnit ;
34
33
34
+ import org .assertj .core .api .AbstractAssert ;
35
35
import org .junit .jupiter .api .AfterEach ;
36
36
import org .junit .jupiter .api .Test ;
37
37
import org .junit .jupiter .api .extension .ParameterContext ;
@@ -116,11 +116,7 @@ void fixedDelayTask(@NameToClass Class<?> beanClass, long expectedInterval) {
116
116
new DirectFieldAccessor (registrar ).getPropertyValue ("fixedDelayTasks" );
117
117
assertThat (fixedDelayTasks ).hasSize (1 );
118
118
IntervalTask task = fixedDelayTasks .get (0 );
119
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
120
- Object targetObject = runnable .getTarget ();
121
- Method targetMethod = runnable .getMethod ();
122
- assertThat (targetObject ).isEqualTo (target );
123
- assertThat (targetMethod .getName ()).isEqualTo ("fixedDelay" );
119
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("fixedDelay" );
124
120
assertThat (task .getInitialDelayDuration ()).isZero ();
125
121
assertThat (task .getIntervalDuration ()).isEqualTo (
126
122
Duration .ofMillis (expectedInterval < 0 ? Long .MAX_VALUE : expectedInterval ));
@@ -150,11 +146,7 @@ void fixedRateTask(@NameToClass Class<?> beanClass, long expectedInterval) {
150
146
new DirectFieldAccessor (registrar ).getPropertyValue ("fixedRateTasks" );
151
147
assertThat (fixedRateTasks ).hasSize (1 );
152
148
IntervalTask task = fixedRateTasks .get (0 );
153
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
154
- Object targetObject = runnable .getTarget ();
155
- Method targetMethod = runnable .getMethod ();
156
- assertThat (targetObject ).isEqualTo (target );
157
- assertThat (targetMethod .getName ()).isEqualTo ("fixedRate" );
149
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("fixedRate" );
158
150
assertSoftly (softly -> {
159
151
softly .assertThat (task .getInitialDelayDuration ()).as ("initial delay" ).isZero ();
160
152
softly .assertThat (task .getIntervalDuration ()).as ("interval" ).isEqualTo (Duration .ofMillis (expectedInterval ));
@@ -185,11 +177,7 @@ void fixedRateTaskWithInitialDelay(@NameToClass Class<?> beanClass, long expecte
185
177
new DirectFieldAccessor (registrar ).getPropertyValue ("fixedRateTasks" );
186
178
assertThat (fixedRateTasks ).hasSize (1 );
187
179
IntervalTask task = fixedRateTasks .get (0 );
188
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
189
- Object targetObject = runnable .getTarget ();
190
- Method targetMethod = runnable .getMethod ();
191
- assertThat (targetObject ).isEqualTo (target );
192
- assertThat (targetMethod .getName ()).isEqualTo ("fixedRate" );
180
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("fixedRate" );
193
181
assertSoftly (softly -> {
194
182
softly .assertThat (task .getInitialDelayDuration ()).as ("initial delay" ).isEqualTo (Duration .ofMillis (expectedInitialDelay ));
195
183
softly .assertThat (task .getIntervalDuration ()).as ("interval" ).isEqualTo (Duration .ofMillis (expectedInterval ));
@@ -250,19 +238,11 @@ private void severalFixedRates(StaticApplicationContext context,
250
238
new DirectFieldAccessor (registrar ).getPropertyValue ("fixedRateTasks" );
251
239
assertThat (fixedRateTasks ).hasSize (2 );
252
240
IntervalTask task1 = fixedRateTasks .get (0 );
253
- ScheduledMethodRunnable runnable1 = (ScheduledMethodRunnable ) task1 .getRunnable ();
254
- Object targetObject = runnable1 .getTarget ();
255
- Method targetMethod = runnable1 .getMethod ();
256
- assertThat (targetObject ).isEqualTo (target );
257
- assertThat (targetMethod .getName ()).isEqualTo ("fixedRate" );
241
+ assertThatScheduledRunnable (task1 .getRunnable ()).hasTarget (target ).hasMethodName ("fixedRate" );
258
242
assertThat (task1 .getInitialDelayDuration ()).isZero ();
259
243
assertThat (task1 .getIntervalDuration ()).isEqualTo (Duration .ofMillis (4_000L ));
260
244
IntervalTask task2 = fixedRateTasks .get (1 );
261
- ScheduledMethodRunnable runnable2 = (ScheduledMethodRunnable ) task2 .getRunnable ();
262
- targetObject = runnable2 .getTarget ();
263
- targetMethod = runnable2 .getMethod ();
264
- assertThat (targetObject ).isEqualTo (target );
265
- assertThat (targetMethod .getName ()).isEqualTo ("fixedRate" );
245
+ assertThatScheduledRunnable (task2 .getRunnable ()).hasTarget (target ).hasMethodName ("fixedRate" );
266
246
assertThat (task2 .getInitialDelayDuration ()).isEqualTo (Duration .ofMillis (2_000L ));
267
247
assertThat (task2 .getIntervalDuration ()).isEqualTo (Duration .ofMillis (4_000L ));
268
248
}
@@ -286,11 +266,7 @@ void oneTimeTask() {
286
266
new DirectFieldAccessor (registrar ).getPropertyValue ("oneTimeTasks" );
287
267
assertThat (oneTimeTasks ).hasSize (1 );
288
268
OneTimeTask task = oneTimeTasks .get (0 );
289
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
290
- Object targetObject = runnable .getTarget ();
291
- Method targetMethod = runnable .getMethod ();
292
- assertThat (targetObject ).isEqualTo (target );
293
- assertThat (targetMethod .getName ()).isEqualTo ("oneTimeTask" );
269
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("oneTimeTask" );
294
270
assertThat (task .getInitialDelayDuration ()).isEqualTo (Duration .ofMillis (2_000L ));
295
271
}
296
272
@@ -313,11 +289,7 @@ void cronTask() {
313
289
new DirectFieldAccessor (registrar ).getPropertyValue ("cronTasks" );
314
290
assertThat (cronTasks ).hasSize (1 );
315
291
CronTask task = cronTasks .get (0 );
316
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
317
- Object targetObject = runnable .getTarget ();
318
- Method targetMethod = runnable .getMethod ();
319
- assertThat (targetObject ).isEqualTo (target );
320
- assertThat (targetMethod .getName ()).isEqualTo ("cron" );
292
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("cron" );
321
293
assertThat (task .getExpression ()).isEqualTo ("*/7 * * * * ?" );
322
294
}
323
295
@@ -340,11 +312,7 @@ void cronTaskWithZone() {
340
312
new DirectFieldAccessor (registrar ).getPropertyValue ("cronTasks" );
341
313
assertThat (cronTasks ).hasSize (1 );
342
314
CronTask task = cronTasks .get (0 );
343
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
344
- Object targetObject = runnable .getTarget ();
345
- Method targetMethod = runnable .getMethod ();
346
- assertThat (targetObject ).isEqualTo (target );
347
- assertThat (targetMethod .getName ()).isEqualTo ("cron" );
315
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("cron" );
348
316
assertThat (task .getExpression ()).isEqualTo ("0 0 0-4,6-23 * * ?" );
349
317
Trigger trigger = task .getTrigger ();
350
318
assertThat (trigger ).isNotNull ();
@@ -404,11 +372,9 @@ void cronTaskWithScopedProxy() {
404
372
new DirectFieldAccessor (registrar ).getPropertyValue ("cronTasks" );
405
373
assertThat (cronTasks ).hasSize (1 );
406
374
CronTask task = cronTasks .get (0 );
407
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
408
- Object targetObject = runnable .getTarget ();
409
- Method targetMethod = runnable .getMethod ();
410
- assertThat (targetObject ).isEqualTo (context .getBean (ScopedProxyUtils .getTargetBeanName ("target" )));
411
- assertThat (targetMethod .getName ()).isEqualTo ("cron" );
375
+ assertThatScheduledRunnable (task .getRunnable ())
376
+ .hasTarget (context .getBean (ScopedProxyUtils .getTargetBeanName ("target" )))
377
+ .hasMethodName ("cron" );
412
378
assertThat (task .getExpression ()).isEqualTo ("*/7 * * * * ?" );
413
379
}
414
380
@@ -431,11 +397,7 @@ void metaAnnotationWithFixedRate() {
431
397
new DirectFieldAccessor (registrar ).getPropertyValue ("fixedRateTasks" );
432
398
assertThat (fixedRateTasks ).hasSize (1 );
433
399
IntervalTask task = fixedRateTasks .get (0 );
434
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
435
- Object targetObject = runnable .getTarget ();
436
- Method targetMethod = runnable .getMethod ();
437
- assertThat (targetObject ).isEqualTo (target );
438
- assertThat (targetMethod .getName ()).isEqualTo ("checkForUpdates" );
400
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("checkForUpdates" );
439
401
assertThat (task .getIntervalDuration ()).isEqualTo (Duration .ofMillis (5_000L ));
440
402
}
441
403
@@ -458,11 +420,7 @@ void composedAnnotationWithInitialDelayAndFixedRate() {
458
420
new DirectFieldAccessor (registrar ).getPropertyValue ("fixedRateTasks" );
459
421
assertThat (fixedRateTasks ).hasSize (1 );
460
422
IntervalTask task = fixedRateTasks .get (0 );
461
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
462
- Object targetObject = runnable .getTarget ();
463
- Method targetMethod = runnable .getMethod ();
464
- assertThat (targetObject ).isEqualTo (target );
465
- assertThat (targetMethod .getName ()).isEqualTo ("checkForUpdates" );
423
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("checkForUpdates" );
466
424
assertThat (task .getIntervalDuration ()).isEqualTo (Duration .ofMillis (5_000L ));
467
425
assertThat (task .getInitialDelayDuration ()).isEqualTo (Duration .ofMillis (1_000L ));
468
426
}
@@ -486,11 +444,7 @@ void metaAnnotationWithCronExpression() {
486
444
new DirectFieldAccessor (registrar ).getPropertyValue ("cronTasks" );
487
445
assertThat (cronTasks ).hasSize (1 );
488
446
CronTask task = cronTasks .get (0 );
489
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
490
- Object targetObject = runnable .getTarget ();
491
- Method targetMethod = runnable .getMethod ();
492
- assertThat (targetObject ).isEqualTo (target );
493
- assertThat (targetMethod .getName ()).isEqualTo ("generateReport" );
447
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("generateReport" );
494
448
assertThat (task .getExpression ()).isEqualTo ("0 0 * * * ?" );
495
449
}
496
450
@@ -519,11 +473,7 @@ void propertyPlaceholderWithCron() {
519
473
new DirectFieldAccessor (registrar ).getPropertyValue ("cronTasks" );
520
474
assertThat (cronTasks ).hasSize (1 );
521
475
CronTask task = cronTasks .get (0 );
522
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
523
- Object targetObject = runnable .getTarget ();
524
- Method targetMethod = runnable .getMethod ();
525
- assertThat (targetObject ).isEqualTo (target );
526
- assertThat (targetMethod .getName ()).isEqualTo ("x" );
476
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("x" );
527
477
assertThat (task .getExpression ()).isEqualTo (businessHoursCronExpression );
528
478
}
529
479
@@ -578,11 +528,7 @@ void propertyPlaceholderWithFixedDelay(@NameToClass Class<?> beanClass, String f
578
528
new DirectFieldAccessor (registrar ).getPropertyValue ("fixedDelayTasks" );
579
529
assertThat (fixedDelayTasks ).hasSize (1 );
580
530
IntervalTask task = fixedDelayTasks .get (0 );
581
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
582
- Object targetObject = runnable .getTarget ();
583
- Method targetMethod = runnable .getMethod ();
584
- assertThat (targetObject ).isEqualTo (target );
585
- assertThat (targetMethod .getName ()).isEqualTo ("fixedDelay" );
531
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("fixedDelay" );
586
532
assertSoftly (softly -> {
587
533
softly .assertThat (task .getInitialDelayDuration ()).as ("initial delay" ).isEqualTo (Duration .ofMillis (expectedInitialDelay ));
588
534
softly .assertThat (task .getIntervalDuration ()).as ("interval" ).isEqualTo (Duration .ofMillis (expectedInterval ));
@@ -622,11 +568,7 @@ void propertyPlaceholderWithFixedRate(@NameToClass Class<?> beanClass, String fi
622
568
new DirectFieldAccessor (registrar ).getPropertyValue ("fixedRateTasks" );
623
569
assertThat (fixedRateTasks ).hasSize (1 );
624
570
IntervalTask task = fixedRateTasks .get (0 );
625
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
626
- Object targetObject = runnable .getTarget ();
627
- Method targetMethod = runnable .getMethod ();
628
- assertThat (targetObject ).isEqualTo (target );
629
- assertThat (targetMethod .getName ()).isEqualTo ("fixedRate" );
571
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("fixedRate" );
630
572
assertSoftly (softly -> {
631
573
softly .assertThat (task .getInitialDelayDuration ()).as ("initial delay" ).isEqualTo (Duration .ofMillis (expectedInitialDelay ));
632
574
softly .assertThat (task .getIntervalDuration ()).as ("interval" ).isEqualTo (Duration .ofMillis (expectedInterval ));
@@ -656,11 +598,7 @@ void expressionWithCron() {
656
598
new DirectFieldAccessor (registrar ).getPropertyValue ("cronTasks" );
657
599
assertThat (cronTasks ).hasSize (1 );
658
600
CronTask task = cronTasks .get (0 );
659
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
660
- Object targetObject = runnable .getTarget ();
661
- Method targetMethod = runnable .getMethod ();
662
- assertThat (targetObject ).isEqualTo (target );
663
- assertThat (targetMethod .getName ()).isEqualTo ("x" );
601
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("x" );
664
602
assertThat (task .getExpression ()).isEqualTo (businessHoursCronExpression );
665
603
}
666
604
@@ -689,11 +627,7 @@ void propertyPlaceholderForMetaAnnotation() {
689
627
new DirectFieldAccessor (registrar ).getPropertyValue ("cronTasks" );
690
628
assertThat (cronTasks ).hasSize (1 );
691
629
CronTask task = cronTasks .get (0 );
692
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
693
- Object targetObject = runnable .getTarget ();
694
- Method targetMethod = runnable .getMethod ();
695
- assertThat (targetObject ).isEqualTo (target );
696
- assertThat (targetMethod .getName ()).isEqualTo ("y" );
630
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("y" );
697
631
assertThat (task .getExpression ()).isEqualTo (businessHoursCronExpression );
698
632
}
699
633
@@ -716,11 +650,7 @@ void nonVoidReturnType() {
716
650
new DirectFieldAccessor (registrar ).getPropertyValue ("cronTasks" );
717
651
assertThat (cronTasks ).hasSize (1 );
718
652
CronTask task = cronTasks .get (0 );
719
- ScheduledMethodRunnable runnable = (ScheduledMethodRunnable ) task .getRunnable ();
720
- Object targetObject = runnable .getTarget ();
721
- Method targetMethod = runnable .getMethod ();
722
- assertThat (targetObject ).isEqualTo (target );
723
- assertThat (targetMethod .getName ()).isEqualTo ("cron" );
653
+ assertThatScheduledRunnable (task .getRunnable ()).hasTarget (target ).hasMethodName ("cron" );
724
654
assertThat (task .getExpression ()).isEqualTo ("0 0 9-17 * * MON-FRI" );
725
655
}
726
656
@@ -1088,4 +1018,29 @@ public Class<?> convert(Object beanClassName, ParameterContext context) throws A
1088
1018
}
1089
1019
}
1090
1020
1021
+ static ScheduledMethodRunnableAssert assertThatScheduledRunnable (Runnable runnable ) {
1022
+ return new ScheduledMethodRunnableAssert (runnable );
1023
+ }
1024
+
1025
+ static class ScheduledMethodRunnableAssert extends AbstractAssert <ScheduledMethodRunnableAssert , Runnable > {
1026
+
1027
+ public ScheduledMethodRunnableAssert (Runnable actual ) {
1028
+ super (actual , ScheduledMethodRunnableAssert .class );
1029
+ assertThat (actual ).extracting ("runnable" ).isInstanceOf (ScheduledMethodRunnable .class );
1030
+ }
1031
+
1032
+ public ScheduledMethodRunnableAssert hasTarget (Object target ) {
1033
+ isNotNull ();
1034
+ assertThat (actual ).extracting ("runnable.target" ).isEqualTo (target );
1035
+ return this ;
1036
+ }
1037
+
1038
+ public ScheduledMethodRunnableAssert hasMethodName (String name ) {
1039
+ isNotNull ();
1040
+ assertThat (actual ).extracting ("runnable.method.name" ).isEqualTo (name );
1041
+ return this ;
1042
+ }
1043
+
1044
+ }
1045
+
1091
1046
}
0 commit comments