Я перехожу с Java 8 на Java 10 и запускаю тест, который сейчас не проходит из-за классов, защищенных пакетами.Сборка выполняется под maven 3.5.4 + Oracle JDK 10.0.2:
- maven-compiler-plugin 3.7.0 + asm 6.2
- maven-surefire-plugin 2.22.0+ asm 6.2 + junit 5.2.0
- asm 6.2 требуется для обоих компиляторов / верных из-за ошибки в версии ASM, используемой этими плагинами.
- mockito-core 2.20.0 (но использовал 2.20.0 с Java 8 раньше).
- Eclipse Photon R
Проект можно найти здесь ide-bugs.zip (этонаходится на форуме Eclipse, потому что я создал эту тему на Eclipse для другой проблемы, на этот раз с Eclipse, имеющей локальную ошибку с модулем).
Тест очень прост: мы пытаемся смоделироватьдругой класс, с разным уровнем доступа - все они работали в Java 8.
- защищенный пакет класс
- открытый класс, но не экспортированный, не открытый
- открытыйкласс не экспортируется, но открывается для Mockito
- открытый класс не экспортируется, но открывается для всех
- pЗащищенный класс ackage не экспортируется, но открывается в Mockito
- Защищенный класс пакета не экспортируется, но открывается для всех
В Java 8 случаи 1, 5 и 6 одинаковы (доступ к пакетузащищенный).Случаи 2, 3 и 4 одинаковы (доступ к общедоступным).
Тест не пройден, так как Mockito не может:
- class org.mockito.codegen.NotExportedOpenToMockitoProtected $ MockitoMock$ 117073031 не может получить доступ к своему суперклассу nodatafound.mjpmsuc.withopens.NotExportedOpenToMockitoProtected
- , класс org.mockito.codegen.NotExportedNotOpenedPublic $ MockitoMock $ 365628885 (в именованном модуле nodpound..mockito_jpms_usecase), поскольку модуль nodatafound.mockito_jpms_usecase не экспортирует nodatafound.mjpmsuc.internal в неназванный модуль @ 0x3f07b12c
. У Mockito фактически есть имя Automatic-Module-Name, но оно рассматривается как неиспользованный модуль, поскольку найден весь jar-файлв пути к классам для большого «неназванного модуля».
Хотя я в порядке с переходом от защищенного пакета к неэкспортированному пакету, я не понимаю, как решить проблему с сохранением моего интерфейса/ класс не виден другим модулям?
[править] обновил версию плагина / зависимости через месяц, безрезультатно.