Skip to content

Troubleshooting

Olga Naumenko edited this page Sep 21, 2023 · 9 revisions

Troubleshooting

Here is the list of known but unsolved UnitTestBot Java problems with workarounds:

InaccessibleObjectException: successful symbolic executions fail due to failing utility methods

Problem details:

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 an Object without using Reflection. Reflection methods using setAccessible are forbidden in JDK 17 or later, so the UtUtils methods using setAccessible do not work, and successful executions fail.

See an example in the issue.

Solution:

Add the keys to the test run configuration:

  1. Choose Edit Configurations.
  2. In Run/Debug Configurations, choose the required test run configuration.
  3. Choose to Modify options and Add VM options.
  4. For VM options, add the following keys:
    --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED

/images/troubleshooting/tr-edit-run-config.PNG

Package is declared in module, which does not export it to the unnamed module: uncompilable tests

Problem details:

When using JDK 17, you may get uncompilable tests, and IntelliJ IDEA may show this:

Package sun.net.util is declared in module java.base, which does not export it to the unnamed module Add --add-exports java.base/sun.net.util=ALL-UNNAMED to module compiler options

Using JDK 17, UnitTestBot Java tries to create mockStatic(sun.net.util.IPAddressUtil.class) for the code working with network. IPAddressUtill is not exported from JDK module, so the resulting tests are not compilable.

See an example in the issue.

Solution:

Add the following key to the test run configuration (see the related solution):
--add-exports java.base/sun.net.util=ALL-UNNAMED

Clone this wiki locally