UnitTestBot / UTBotJava

Automated unit test generation and precise code analysis for Java
Apache License 2.0
137 stars 43 forks source link

utbot-cli: Failed to load class member of class and throw IllegalStateException while running BunchTestGeneratorCommand #2671

Open zerowsw opened 1 year ago

zerowsw commented 1 year ago

Description

We are using utbot-cli to generate unit tests for some open source projects. However, the test generation failed for bunch of applications due to: java.lang.IllegalStateException: Error: Cannot find the target class in the classpath

This happens when trying to load class member of some classes. The current classFqnToPath function (https://github.com/UnitTestBot/UTBotJava/blob/main/utbot-core/src/main/kotlin/org/utbot/common/PathUtil.kt#L85) simply replaced '.' with '/' which doesn't work for this case.

To Reproduce

Steps to reproduce the behavior:

  1. clone the code of https://github.com/JaewoongMoon/fuzzler
  2. run mvn dependency:build-classpath --define mdep.outputFile=/tmp/classpath.txt to store dependency classpath into a file.
  3. run mvn compile to compile the code (use Java 8)
  4. compile UTBotJava and get utbot-cli.jar
  5. Run bunchGenerate command through code like java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.ref=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED --add-opens=java.base/jdk.internal.icu.util=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED --add-opens=java.logging/java.util.logging=ALL-UNNAMED -jar /<Relative Path to utbot-cli>/utbot-cli.jar bunchGenerate --test-framework junit5 --classpath /<Relative path to fuzzler >/src/target/classes --classpathFile /tmp/classpath.txt --output <Any output path>

Expected behavior

Some tests should be generated

Actual behavior

It will fail and throw exception

Visual proofs (screenshots, logs, images)


java.lang.IllegalStateException: Error: Cannot find the target class in the classpath
--
2030 | at org.utbot.cli.BunchTestGeneratorCommand.generateTestsForClass(BunchTestGeneratorCommand.kt:88)
2031 | at org.utbot.cli.BunchTestGeneratorCommand.run(BunchTestGeneratorCommand.kt:78)
2032 | at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:204)
2033 | at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:213)
2034 | at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:17)
2035 | at com.github.ajalt.clikt.core.CliktCommand.parse(CliktCommand.kt:396)
2036 | at com.github.ajalt.clikt.core.CliktCommand.parse$default(CliktCommand.kt:393)
2037 | at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:411)
2038 | at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:436)
2039 | at org.utbot.cli.ApplicationKt.main(Application.kt:31)

Environment

  1. https://github.com/JaewoongMoon/fuzzler was compiled with java8
  2. java 17 was used to run utbot-cli
  3. Tested on macOS, M1 (AArch64 architecture)

Additional context

Add any other context about the problem here.