Skip to content

Commit 9a5bc93

Browse files
authored
Fixed flaky tests due to class.getMethods (#1525)
* Fixed flaky tests due to `class.getMethod` * Simplify Comparator code
1 parent 0a01ee9 commit 9a5bc93

File tree

1 file changed

+26
-17
lines changed

1 file changed

+26
-17
lines changed

core/src/test/java/feign/TypesResolveReturnTypeTest.java

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
import java.lang.reflect.ParameterizedType;
2020
import java.lang.reflect.Type;
2121
import java.lang.reflect.TypeVariable;
22+
import java.util.Arrays;
2223
import java.util.ArrayList;
2324
import java.util.Collection;
25+
import java.util.Comparator;
2426
import java.util.HashMap;
2527
import java.util.List;
2628
import java.util.Map;
@@ -39,6 +41,13 @@ interface OverridingConcreteSimple extends Simple {
3941
String get();
4042
}
4143

44+
public Method[] getMethods(Class<?> c) {
45+
Method[] methods = c.getMethods();
46+
Arrays.sort(methods,
47+
Comparator.comparing(o -> (o.getName() + o.getGenericReturnType().getTypeName())));
48+
return methods;
49+
}
50+
4251
@Test
4352
public void simple() {
4453
Method[] methods = Simple.class.getMethods();
@@ -159,7 +168,7 @@ public void concreteSimpleClassGenericSecondLevel() {
159168

160169
@Test
161170
public void overridingConcreteSimpleClassGenericSecondLevel() {
162-
Method[] methods = OverridingConcreteSimpleClassGenericSecondLevel.class.getMethods();
171+
Method[] methods = getMethods(OverridingConcreteSimpleClassGenericSecondLevel.class);
163172
Assertions.assertThat(methods.length).isEqualTo(2);
164173
Type resolved = Types.resolve(OverridingConcreteSimpleClassGenericSecondLevel.class,
165174
OverridingConcreteSimpleClassGenericSecondLevel.class, methods[0].getGenericReturnType());
@@ -221,7 +230,7 @@ public void concreteSimpleClassMultipleGenericSecondLevel() {
221230

222231
@Test
223232
public void overridingConcreteSimpleClassMultipleGenericSecondLevel() {
224-
Method[] methods = OverridingConcreteSimpleClassMultipleGenericSecondLevel.class.getMethods();
233+
Method[] methods = getMethods(OverridingConcreteSimpleClassMultipleGenericSecondLevel.class);
225234
Assertions.assertThat(methods.length).isEqualTo(2);
226235
Type resolved =
227236
Types.resolve(OverridingConcreteSimpleClassMultipleGenericSecondLevel.class,
@@ -255,7 +264,7 @@ public void realizingSimpleClassGenericThirdLevel() {
255264

256265
@Test
257266
public void realizingSimpleClassMultipleGenericThirdLevel() {
258-
Method[] methods = RealizingSimpleClassMultipleGenericThirdLevel.class.getMethods();
267+
Method[] methods = getMethods(RealizingSimpleClassMultipleGenericThirdLevel.class);
259268
Assertions.assertThat(methods.length).isEqualTo(2);
260269
Type resolved = Types.resolve(RealizingSimpleClassMultipleGenericThirdLevel.class,
261270
RealizingSimpleClassMultipleGenericThirdLevel.class, methods[0].getGenericReturnType());
@@ -269,7 +278,7 @@ public void realizingSimpleClassMultipleGenericThirdLevel() {
269278

270279
@Test
271280
public void realizingOverridingSimpleClassGenericThirdLevel() {
272-
Method[] methods = RealizingOverridingSimpleClassGenericThirdLevel.class.getMethods();
281+
Method[] methods = getMethods(RealizingOverridingSimpleClassGenericThirdLevel.class);
273282
Assertions.assertThat(methods.length).isEqualTo(2);
274283
Type resolved = Types.resolve(RealizingOverridingSimpleClassGenericThirdLevel.class,
275284
RealizingOverridingSimpleClassGenericThirdLevel.class, methods[0].getGenericReturnType());
@@ -283,7 +292,7 @@ public void realizingOverridingSimpleClassGenericThirdLevel() {
283292

284293
@Test
285294
public void realizingOverridingSimpleClassMultipleGenericThirdLevel() {
286-
Method[] methods = RealizingOverridingSimpleClassMultipleGenericThirdLevel.class.getMethods();
295+
Method[] methods = getMethods(RealizingOverridingSimpleClassMultipleGenericThirdLevel.class);
287296
Assertions.assertThat(methods.length).isEqualTo(2);
288297
Type resolved =
289298
Types.resolve(RealizingOverridingSimpleClassMultipleGenericThirdLevel.class,
@@ -354,7 +363,7 @@ public void concreteSimpleClassGenericThirdLevel() {
354363

355364
@Test
356365
public void OverridingConcreteSimpleClassGenericThirdLevel() {
357-
Method[] methods = OverridingConcreteSimpleClassGenericThirdLevel.class.getMethods();
366+
Method[] methods = getMethods(OverridingConcreteSimpleClassGenericThirdLevel.class);
358367
Assertions.assertThat(methods.length).isEqualTo(2);
359368
Type resolved = Types.resolve(OverridingConcreteSimpleClassGenericThirdLevel.class,
360369
OverridingConcreteSimpleClassGenericThirdLevel.class, methods[0].getGenericReturnType());
@@ -452,31 +461,31 @@ public void concreteCollectionGenericFourthLevel() {
452461

453462
@Test
454463
public void overridingConcreteCollectionGenericFourthLevel() {
455-
Method[] methods = OverridingConcreteCollectionGenericFourthLevel.class.getMethods();
464+
Method[] methods = getMethods(OverridingConcreteCollectionGenericFourthLevel.class);
456465
Assertions.assertThat(methods.length).isEqualTo(2);
457466
Type resolved = Types.resolve(OverridingConcreteCollectionGenericFourthLevel.class,
458-
OverridingConcreteCollectionGenericFourthLevel.class, methods[0].getGenericReturnType());
467+
OverridingConcreteCollectionGenericFourthLevel.class, methods[1].getGenericReturnType());
459468
Assertions.assertThat(resolved instanceof ParameterizedType).isTrue();
460469
Type resolved2 = Types.resolve(OverridingConcreteCollectionGenericFourthLevel.class,
461-
OverridingConcreteCollectionGenericFourthLevel.class, methods[1].getGenericReturnType());
470+
OverridingConcreteCollectionGenericFourthLevel.class, methods[0].getGenericReturnType());
462471
Assertions.assertThat(resolved2).isEqualTo(Object.class);
463472
Type resolvedType = Types.resolveReturnType(resolved, resolved2);
464473
Assertions.assertThat(resolvedType).isEqualTo(resolved);
465474
}
466475

467476
@Test
468477
public void overrideOverridingConcreteCollectionGenericFourthLevel() {
469-
Method[] methods = OverrideOverridingConcreteCollectionGenericFourthLevel.class.getMethods();
478+
Method[] methods = getMethods(OverrideOverridingConcreteCollectionGenericFourthLevel.class);
470479
Assertions.assertThat(methods.length).isEqualTo(2);
471480
Type resolved =
472481
Types.resolve(OverrideOverridingConcreteCollectionGenericFourthLevel.class,
473482
OverrideOverridingConcreteCollectionGenericFourthLevel.class,
474-
methods[0].getGenericReturnType());
483+
methods[1].getGenericReturnType());
475484
Assertions.assertThat(resolved instanceof ParameterizedType).isTrue();
476485
Type resolved2 =
477486
Types.resolve(OverrideOverridingConcreteCollectionGenericFourthLevel.class,
478487
OverrideOverridingConcreteCollectionGenericFourthLevel.class,
479-
methods[1].getGenericReturnType());
488+
methods[0].getGenericReturnType());
480489
Assertions.assertThat(resolved2).isEqualTo(Object.class);
481490
Type resolvedType = Types.resolveReturnType(resolved, resolved2);
482491
Assertions.assertThat(resolvedType).isEqualTo(resolved);
@@ -505,20 +514,20 @@ public void concreteGenericCollectionGenericFifthLevel() {
505514

506515
@Test
507516
public void overridingConcreteGenericCollectionGenericFifthLevel() {
508-
Method[] methods = OverridingConcreteGenericCollectionGenericFifthLevel.class.getMethods();
517+
Method[] methods = getMethods(OverridingConcreteGenericCollectionGenericFifthLevel.class);
509518
Assertions.assertThat(methods.length).isEqualTo(2);
510519
Type resolved =
511520
Types.resolve(OverridingConcreteGenericCollectionGenericFifthLevel.class,
512521
OverridingConcreteGenericCollectionGenericFifthLevel.class,
513-
methods[0].getGenericReturnType());
522+
methods[1].getGenericReturnType());
514523
Assertions.assertThat(resolved instanceof ParameterizedType).isTrue();
515524
Type resolved2 =
516525
Types.resolve(OverridingConcreteGenericCollectionGenericFifthLevel.class,
517526
OverridingConcreteGenericCollectionGenericFifthLevel.class,
518-
methods[1].getGenericReturnType());
527+
methods[0].getGenericReturnType());
519528
Assertions.assertThat(resolved2).isEqualTo(Object.class);
520-
Type resolvedType = Types.resolveReturnType(methods[0].getGenericReturnType(),
521-
methods[1].getGenericReturnType());
529+
Type resolvedType = Types.resolveReturnType(methods[1].getGenericReturnType(),
530+
methods[0].getGenericReturnType());
522531
Assertions.assertThat(resolvedType).isEqualTo(resolved);
523532
}
524533

0 commit comments

Comments
 (0)