diff --git a/easy-random-core/src/main/java/org/jeasy/random/util/ClassGraphFacade.java b/easy-random-core/src/main/java/org/jeasy/random/util/ClassGraphFacade.java index e1855becc..11ce91895 100644 --- a/easy-random-core/src/main/java/org/jeasy/random/util/ClassGraphFacade.java +++ b/easy-random-core/src/main/java/org/jeasy/random/util/ClassGraphFacade.java @@ -53,7 +53,7 @@ public static List> getPublicConcreteSubTypesOf(final Class type } private static List> searchForPublicConcreteSubTypesOf(final Class type) { - String typeName = type.getCanonicalName(); + String typeName = type.getName(); ClassInfoList subTypes = type.isInterface() ? scanResult.getClassesImplementing(typeName) : scanResult.getSubclasses(typeName); List> loadedSubTypes = subTypes.filter(subType -> subType.isPublic() && !subType.isAbstract()).loadClasses(true); return Collections.unmodifiableList(loadedSubTypes); diff --git a/easy-random-core/src/test/java/org/jeasy/random/parameters/ScanClasspathForConcreteTypesParameterTests.java b/easy-random-core/src/test/java/org/jeasy/random/parameters/ScanClasspathForConcreteTypesParameterTests.java index da955b684..37cf3e863 100644 --- a/easy-random-core/src/test/java/org/jeasy/random/parameters/ScanClasspathForConcreteTypesParameterTests.java +++ b/easy-random-core/src/test/java/org/jeasy/random/parameters/ScanClasspathForConcreteTypesParameterTests.java @@ -29,6 +29,7 @@ import java.util.Date; +import org.assertj.core.api.Assertions; import org.jeasy.random.EasyRandom; import org.jeasy.random.EasyRandomParameters; import org.junit.jupiter.api.Test; @@ -118,4 +119,32 @@ public void whenScanClasspathForConcreteTypesIsEnabled_thenShouldPopulateAbstrac then(randomValue.getTestEnum()).isNotNull(); } + + // issue https://github.com/j-easy/easy-random/issues/353 + + @Test + void testScanClasspathForConcreteTypes_whenConcreteTypeIsAnInnerClass() { + EasyRandomParameters parameters = + new EasyRandomParameters().scanClasspathForConcreteTypes(true); + EasyRandom easyRandom = new EasyRandom(parameters); + + Foobar foobar = easyRandom.nextObject(Foobar.class); + + Assertions.assertThat(foobar).isNotNull(); + Assertions.assertThat(foobar.getToto()).isNotNull(); + } + + public class Foobar { + + public abstract class Toto {} + + public class TotoImpl extends Toto {} + + private Toto toto; + + public Toto getToto() { + return toto; + } + } + }