- Notifications
You must be signed in to change notification settings - Fork45
Troubleshooting
Here is the list of known but unsolved UnitTestBot Java problems with workarounds:
InaccessibleObjectException: successful symbolic executions fail due to failing utility methodsPackage is declared in module, which does not export it to the unnamed module: uncompilable tests
When using JDK 17, you may get this kind of exception for generating tests:
java.lang.reflect.InaccessibleObjectException: Unable to make private native java.lang.reflect.Field[]java.lang.Class.getDeclaredFields0(boolean) accessible: module java.base does not "opens java.lang" to unnamed module @5afa04c
The symbolic execution engine in UnitTestBot Java may generate tests that should pass, but they fail.The reason is that sometimes UnitTestBot Java cannot build anObject without usingReflection.Reflection methods usingsetAccessible are forbidden in JDK 17 or later, so theUtUtils methods usingsetAccessible do not work, and successful executions fail.
See an example in theissue.
The solution is to open the necessary packages by editing test run configuration. The same test may require more thanone package to open. Please open the packages suggested in the exception messages one by one.
Editing test run configuration depends on the build system you use to run tests.
For Maven or IntelliJ, add the keys to the test run configuration—see the most common example:
- ChooseEdit Configurations.
- InRun/Debug Configurations, choose the required test run configuration.
- Choose toModify options andAdd VM options.
- ForVM options, add the following keys:
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED
For example:
For Gradle, add the following VM options to the test task in thebuild.gradle file:
jvmArgs += ["--add-opens", "java.base/java.lang=ALL-UNNAMED", "--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED"]For example:
Problem details:
When using JDK 17, you may get uncompilable tests, and IntelliJ IDEA may show something like this:
Package
sun.net.utilis declared in modulejava.base, which does not export it to the unnamed module
Add--add-exports java.base/sun.net.util=ALL-UNNAMEDto module compiler options
Using JDK 17, UnitTestBot Java may try to mock unexported packages and create uncompilable tests.
See an example in theissue.
Solution:
Add the following key to the test run configuration (see therelated solution):--add-exports java.base/sun.net.util=ALL-UNNAMED
- Check system requirements
- Install or update plugin
- Generate tests with default configuration
- Fine-tune test generation
- Get use of test results
(redirect to/docs inmain repo)
- Contributing guide
- Developer guide
- Naming and labeling conventions
- Interprocess debugging
- Interprocess logging
- UnitTestBot overall architecture
- Android Studio support
- Assumption mechanism
- Choosing language-specific IDE
- Code generation and rendering
- Fuzzing Platform (FP) Design
- Instrumented process API: handling errors and results
- UnitTestBot JavaScript plugin setup
- Night statistics monitoring
- RD for UnitTestBot
- Sandboxing
- UnitTestBot settings
- Speculative field non-nullability assumptions
- Symbolic analysis of static initializers
- Summarization module
- Taint analysis
- UnitTestBot decomposition
- UtUtils class
- UnitTestBot Family changes