PowerMock has the goal to make final classes mockable (which will stop working in future java versions and is an antipattern). This means they have different goals and cannot be userd interchangeably.
But +1 to remove PowerMock at this point and use EasyMock as long as it serves us well. Am Mo., 11. Mai 2020 um 11:14 Uhr schrieb Jean-Baptiste Onofre <[email protected]>: > > Something helpful would be to use an unique mocking framework. So maybe > removing powermock to use easymock only. > > Thoughts ? > > Regards > JB > > > Le 11 mai 2020 à 11:12, Benjamin Marwell <[email protected]> a écrit : > > > > As EasyMock is used throughout the code, I changed my mind about this > > topic and would like to keep it. > > I see no imminent reason to change existing (test) code. > > However, I am open whether to use Mockito for new tests or not, see > > maven link and rationale from the first e-mail. > > > > At the moment, there is only one powermock test left as far as I can > > tell: > > https://github.com/apache/shiro/search?q=powermock&unscoped_q=powermock > > One test had to be rewritten because of a illegal access issue on jdk11 and > > 14. > > > > Because of this, I would like to remove PowerMock until we need it again. > > > > > > Am Fr., 8. Mai 2020 um 19:01 Uhr schrieb Benjamin Marwell > > <[email protected]>: > >> > >> Using PowerMock will result in IllegalReflectiveAccess violations. [1] > >> That is the whole reason the Maven team will stop using PowerMock in > >> the future, design principles aside. > >> With more recent java versions, you just cannot Mock static or final > >> methods/classes anymore. PowerMock *will* cease working at some point. > >> The flag --illegal-access=warn will not be available forever. > >> Mockito will cover 100% of the rest afaik. > >> > >>> but we can start producing module-info's > >> +1 > >> > >>> This makes releases depend on Java 11 (or similar) but that isn't a bad > >>> thing) > >> Only the release build will need a JDK9+, but I am fine with this. > >> It doesn't change the runtime requirements, java 8 will just ignore > >> any module-info.class files in the root. > >> > >>> Worst case we should add a `Automatic-Module-Name` to the manifest (if we > >>> haven't already) > >> +1, this is a good fallback to "reserve" the name. > >> > >> > >> [1] https://github.com/powermock/powermock/issues/969 > >> > >> Am Fr., 8. Mai 2020 um 16:33 Uhr schrieb Brian Demers > >> <[email protected]>: > >>> > >>> I'm +0.9 on Mockito, I'd pick it over EasyMock any time and I've ported a > >>> couple of projects from EasyMock to Mockito in the past. > >>> We might still end up with PowerMockito for some things (so I'm not sure > >>> it > >>> completely fixes resolves the issues without some additional refactoring) > >>> > >>> +1 for sticking with Java 8, but we can start producing module-info's > >>> (where the source is compiled to target 8 and the module-info to 9) using > >>> this technique [1] > >>> This makes releases depend on Java 11 (or similar) but that isn't a bad > >>> thing) > >>> Worst case we should add a `Automatic-Module-Name` to the manifest (if we > >>> haven't already) > >>> > >>> For the OSGi folks on the list, is there any tooling that can generate > >>> OSGi > >>> and JPMS metadata from the same source? > >>> > >>> [1] > >>> https://maven.apache.org/plugins/maven-compiler-plugin/examples/module-info.html > >>> > >>> On Fri, May 8, 2020 at 8:50 AM Francois Papon > >>> <[email protected]> > >>> wrote: > >>> > >>>> Hi, > >>>> > >>>> I have no objection to move to Mockito. > >>>> > >>>> I created jdk14 jobs on Jenkins, however for the openJ9 build, we don't > >>>> have them on the Apache Jenkins workspace. May be we could use Github > >>>> actions or Travis for this. > >>>> > >>>> We are a lot of users that using Java 8 so I'm not sure that switching > >>>> to Java 11 baseline is a good thing. > >>>> > >>>> A lot of company are still using Java 8 and are not planning to upgrade > >>>> soon. > >>>> > >>>> regards, > >>>> > >>>> François > >>>> [email protected] > >>>> > >>>> Le 08/05/2020 à 08:39, Benjamin Marwell a écrit : > >>>>> Hello everyone, > >>>>> > >>>>> I would like to discuss moving away from mocking frameworks like > >>>>> PowerMock, EasyMock etc., replacing them with Mockito where feasible. > >>>>> [1] [2] > >>>>> > >>>>> Rationale: > >>>>> The Apache Maven project is going to do the same switch, because > >>>>> Mockito seems to have superior support for the module system > >>>>> introduced in Java 9. It was also the first to have a > >>>>> module-compatible release. > >>>>> PowerMock cannot be used anymore because of illegal reflection access. > >>>>> In Java 9 and above, opening final methods or classes is not allowed > >>>>> anymore. Instead, better class design is needed anyway. Some tests are > >>>>> already failing on JDK11, like the EnvironmentLoaderServiceTest when > >>>>> used in conjunction with JDK11 (I use openj9 11.0-6 from > >>>>> adoptopenjdk.net), However, this does not seem to be the case in our > >>>>> Jenkins with a hotspot JVM. [3] > >>>>> > >>>>> Benefits: > >>>>> If new tests were written in Mockito only, it is easier to navigate the > >>>> code. > >>>>> Replacing PowerMock with Mockito will have the benefit of forced good > >>>>> class design and not breaking the tests in future JDK releases. > >>>>> > >>>>> Additional thoughts: > >>>>> I would like to add a build job with an openj9 JDK (both Java 8 and 11). > >>>>> > >>>>> Non-Goals: > >>>>> Switching the baseline JDK requirement to 9 or even 11. > >>>>> Rewrite every test. > >>>>> > >>>>> I am looking forward to hearing your opinions on this topic! > >>>>> > >>>>> Ben > >>>>> > >>>>> [1] https://github.com/apache/maven-site/pull/158/files > >>>>> [2] > >>>> https://lists.apache.org/thread.html/r5fd75d1a769d1f8b25f1342789d253cda362d675a9825f6d4bf664f5%40%3Cdev.maven.apache.org%3E > >>>>> [3] > >>>> https://builds.apache.org/view/S-Z/view/Shiro/job/Shiro-master-jdk11/ > >>>> >
