I am creating a modular build (using module-info.java) on GitHub, but when adding a module-info.java to the modules that I want modular, no tests can be executed...
How can I achieve this?
I am using the following versions:
A typical error from the failing tests looks like:
java.lang.reflect.InaccessibleObjectException: Unable to make com.github.jactor.rises.commons.dto.UserDtoTest() accessible: module jactor.rises.commons does not "opens com.github.jactor.rises.commons.dto" to unnamed module @65e98b1c
Welcome to Testing In The Modular World!
Which kind of tests do you want write?
Extra-module tests: Create a test-only project (no "src/main" directory) and declare a "src/test/java/module-info.java" module descriptor.
In-module tests: As it was from Day 1 you need to "blend in"/merge/shadow your test classes into your main classes or vice versa. Here you have mainly two ways to achieve this:
https://sormuras.github.io/blog/2018-09-11-testing-in-the-modular-world
Work-in-progress blueprint https://github.com/sormuras/sandbox/tree/master/sors-modular-testing-blueprint
Integration tests starting with "modular-world-" at https://github.com/sormuras/junit-platform-maven-plugin/tree/master/src/it
There is a (new) option in the Maven Surefire plugin called useModulePath
. This option enables to use the traditional Java 8 class path instead of the module path and ignores a module-info.class
from the main classes not turning on the Java module mode, i.e. all class on the calls path can be used.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<!-- allow to use unnamed modules -->
<useModulePath>false</useModulePath>
</configuration>
</plugin>
That way the test sources can be kept as there were in Java 8. Only The main classes have to be modularized.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With