renovate-bot opened a new pull request, #2884:
URL: https://github.com/apache/fineract/pull/2884

   [![Mend 
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
   
   This PR contains the following updates:
   
   | Package | Change | Age | Adoption | Passing | Confidence |
   |---|---|---|---|---|---|
   | [org.mockito:mockito-bom](https://togithub.com/mockito/mockito) | `4.11.0` 
-> `5.0.0` | 
[![age](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-bom/5.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
 | 
[![adoption](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-bom/5.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
 | 
[![passing](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-bom/5.0.0/compatibility-slim/4.11.0)](https://docs.renovatebot.com/merge-confidence/)
 | 
[![confidence](https://badges.renovateapi.com/packages/maven/org.mockito:mockito-bom/5.0.0/confidence-slim/4.11.0)](https://docs.renovatebot.com/merge-confidence/)
 |
   
   ---
   
   ### ⚠ Dependency Lookup Warnings ⚠
   
   Warnings were logged while processing this repo. Please check the Dependency 
Dashboard for more information.
   
   ---
   
   ### Release Notes
   
   <details>
   <summary>mockito/mockito</summary>
   
   ### [`v5.0.0`](https://togithub.com/mockito/mockito/releases/tag/v5.0.0)
   
   ### Mockito 5: prepare for future JDK versions
   
   For a while now, we have seen an increase in problems/incompatibilities with 
recent versions of the JDK due to our usage of JVM-internal API.
   Most notably, JDK 17 made some changes which are incompatible with the 
current subclass mockmaker.
   Therefore, to prepare for the future of JDK, we are making some core changes 
to ensure Mockito keeps on working.
   
   #### Switch the default mockmaker to `mockito-inline`
   
   Back in Mockito 2.7.6, we published a new mockmaker based on the "inline 
bytecode" principle.
   This mockmaker creates mocks manipulating bytecode equivalent within the 
original class such that its method implementations hook into the normal 
Mockito machinery.
   As a comparison, the subclass mockmaker generates "real" subclasses for 
mocks, to mimic the same behavior.
   While the approaches are similar, the inline mockmaker avoids certain 
restrictions that the JDK imposes.
   For example, it does not violate module boundaries (introduced in JDK 9, but 
more heavily used in JDK 17) and avoids the leaking of the creation of the 
subclass.
   
   Massive thanks to community member [@&#8203;reta](https://togithub.com/reta) 
who implemented this change.
   
   ##### When should I still be using the subclass mockmaker?
   
   There are legitimate remaining use cases for the subclass mockmaker.
   For example, on the Graal VM's native image, the inline mockmaker will not 
work and the subclass mockmaker is the appropriate choice.
   Additionally, if you would like to avoid mocking final classes, using the 
subclass mockmaker is a possibibility.
   Note however that if you solely want to use the subclass mockmaker to avoid 
mocking final, you will run into the above mentioned issues on JDK 17+.
   We want to leave this choice up to our users, which is why we will keep on 
supporting the subclass mockmaker.
   
   If you want to use the subclass mockmaker instead, you can use the new 
`mockito-subclass` artifact (published [on Maven 
Central](https://search.maven.org/artifact/org.mockito/mockito-subclass) along 
with all our other artifacts).
   
   #### Update the minimum supported Java version to 11
   
   Mockito 4 supports Java 8 and above.
   Similar to other open source projects, we are moving away from JDK 8 and to 
newer versions.
   The primary reason for moving away from JDK 8 is the increasing maintenance 
costs with keeping our own infrastructure working.
   Lately we have been running into more and more JDK 8 breakages.
   Additionally, while we want to support the newest JDK API's, our current 
solution to support both JDK 8 and newer versions causes [issues with the 
`SecurityManager`](https://togithub.com/mockito/mockito/issues/2798).
   Since we want Mockito to work on the newest version and more and more 
businesses adopting JDK 11, we have decided to make the switch as well.
   
   Massive thanks to community member [@&#8203;reta](https://togithub.com/reta) 
who implemented this change.
   
   ##### What should I do if I still run JDK 8?
   
   For JDK 8 and below, you can keep on using Mockito 4.
   This is similar to if you are using JDK 6, for which you can keep on using 
Mockito 2.
   The changes in Mockito 5 (for now) are primarily focused on the latest JDK 
versions, which means the API differences between Mockito 4 and 5 are minimal.
   However, over time this will most likely widen, so we do recommend adopting 
JDK 11 in the future.
   
   #### New `type()` method on `ArgumentMatcher`
   
   One of our most used public API's for customizing Mockito is the 
[`ArgumentMatcher` 
interface](https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/ArgumentMatcher.html).
   The interface allows you to define a custom matcher, which you can pass into 
method arguments to provide more targeted matches.
   One major shortcoming of the `ArgumentMatcher` was the lack of varargs 
support.
   There were many, many issues filed related to varargs and Mockito unable to 
handle them.
   
   Community member 
[@&#8203;big-andy-coates](https://togithub.com/big-andy-coates) put in a lot of 
effort to come up with an appropriate solution, including fully implementing 
and comparing 2 approaches.
   Ultimately, we decided that introducing a new `type()` method on 
`ArgumentMatcher` is the best solution.
   As a result, it is now possible to update your custom matchers to implement 
varargs support, if you so desire.
   Note that `ArgumentMatcher` is still a `@FunctionalInterface` and can 
therefore still be written as a lambda.
   
   Massive thanks to community member 
[@&#8203;big-andy-coates](https://togithub.com/big-andy-coates) who implemented 
this change.
   
   ##### What is the effect of this new method?
   
   For varargs methods, there was previously a way to only match zero 
arguments, or two or more arguments, by using the exact number of matchers, i.e.
   
   ```java
   long call(String... args);
   
   // Will match calls with exactly zero arguments:
   when(mock.call()).thenReturn(0L);
   
   // Will match calls with exactly two arguments:
   when(mock.call(any(), any())).thenReturn(0L);
   ```
   
   But following the pattern to match exactly one argument:
   
   ```java
   when(mock.call(any())).thenReturn(0L);
   ```
   
   doesn't work, as `any` is "vararg aware", so Mockito matched the `any` 
against *each element* of the varargs parameter, meaning it will match any 
number of arguments, i.e. the above would of matched all of these:
   
   ```java
   mock.call();
   mock.call("a");
   mock.call("a", "b");
   ```
   
   With the new `type` method, it's now possible to differentiate matching 
calls with any exact number of arguments, or to match any number of arguments.
   
   ```java
   // Match any number of arguments:
   when(mock.call(any(String[].class))).thenReturn(1L);
   // Match invocations with no arguments:
   when(mock.call()).thenReturn(1L);
   // Match invocations with exactly one argument:
   when(mock.call(any())).thenReturn(1L);
   // Alternative to match invocations with exactly one argument:
   when(mock.call(any(String.class))).thenReturn(1L);
   // Match invocations with exactly two arguments:
   when(mock.call(any(), any())).thenReturn(1L);
   ```
   
   Therefore, if you want to match 0 or more arguments, use 
`any(String[].class)`.
   If you want to match an exact number of arguments, use `any(String.class)` 
(and specify as many `any` matchers as arguments you want to match on).
   
   In a similar fashion, the behavior of `ArgumentCaptor.forClass` has changed 
as well.
   If you want to capture all arguments, use an `ArgumentCaptor` for 
`String[]`, otherwise `String`:
   
   ```java
   // Will capture 1 string
   @&#8203;Captor private ArgumentCaptor<String> captor;
   // Will capture all strings
   @&#8203;Captor private ArgumentCaptor<String[]> captor;
   ```
   
   For more information, see the description and conversation in [pull request 
2835](https://togithub.com/mockito/mockito/pull/2835) and [pull request 
2807](https://togithub.com/mockito/mockito/pull/2807).
   
   ##### Do I need to implement this new method?
   
   No, you don't need to.
   Mockito 5 declares a default implementation, returning `Void.type` as the 
type of an `ArgumentMatcher`.
   This essentially means that Mockito will not consider the type when handling 
varargs.
   However, if you do return a specific type, Mockito will consider this when 
matching arguments.
   As a result, this new method is not a source-breaking change, but is a 
bytecode-breaking change.
   All code working on Mockito 4 should work as-is when recompiled with Mockito 
5.
   
   </details>
   
   ---
   
   ### Configuration
   
   📅 **Schedule**: Branch creation - "before 3am on Monday" (UTC), Automerge - 
At any time (no schedule defined).
   
   🚦 **Automerge**: Disabled by config. Please merge this manually once you are 
satisfied.
   
   ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry 
checkbox.
   
   🔕 **Ignore**: Close this PR and you won't be reminded about this update 
again.
   
   ---
   
    - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this 
box
   
   ---
   
   This PR has been generated by [Mend 
Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository 
job log [here](https://app.renovatebot.com/dashboard#github/apache/fineract).
   
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC43My4zIiwidXBkYXRlZEluVmVyIjoiMzQuNzMuMyJ9-->
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to