-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Introducing the Ability to Mock Construction of Generic Types (#2401) #3729
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| if (arguments[0] instanceof Class<?>) { | ||
| return (Class<?>) arguments[0]; | ||
| } | ||
| if (arguments[0] instanceof ParameterizedType) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tried to respect the current flow by just adding the new condition, but since both MockedStatic and MockedConstruction take only one generic parameter, this block can be simplified to something like:
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
Type[] arguments = parameterizedType.getActualTypeArguments();
return (Class<?>)
(arguments[0] instanceof Class<?>
? arguments[0]
: ((ParameterizedType) arguments[0]).getRawType());
}Should I apply this change?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's simplify this, but add a check that arguments.length is only 1. E.g. if (arguments.length != 1) throw MockitoException`
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3729 +/- ##
============================================
+ Coverage 86.40% 86.43% +0.02%
- Complexity 2969 2970 +1
============================================
Files 341 341
Lines 9013 9016 +3
Branches 1111 1111
============================================
+ Hits 7788 7793 +5
+ Misses 943 942 -1
+ Partials 282 281 -1 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1 small nit. The rest LGTM!
| if (arguments[0] instanceof Class<?>) { | ||
| return (Class<?>) arguments[0]; | ||
| } | ||
| if (arguments[0] instanceof ParameterizedType) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's simplify this, but add a check that arguments.length is only 1. E.g. if (arguments.length != 1) throw MockitoException`
…o#2401) MockedStatic and MockedConstruction threw a MockitoException when the provided type was itself parameterized, suggesting to use a raw type instead. For instance, MockedConstruction<MyGenericType<String>> was not allowed. This commit allows to mock generic types without throwing an exception and without forcing users to deal with 'raw use of parameterized class' warnings. Fixes mockito#2401
0df7feb to
cad84e7
Compare
| } | ||
| if (arguments.length != 1) { | ||
| throw new IllegalArgumentException( | ||
| "Incorrect number of type arguments for " |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Throwing an IllegalArgumentException as in InstrumentationMemberAccessor and other places.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks a lot!
| Package | Type | Package file | Manager | Update | Change | |---|---|---|---|---|---| | [org.mockito:mockito-core](https://github.com/mockito/mockito) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `5.19.0` -> `5.20.0` | | [io.modelcontextprotocol:kotlin-sdk-server](https://github.com/modelcontextprotocol/kotlin-sdk) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `0.7.1` -> `0.7.2` | | [io.modelcontextprotocol:kotlin-sdk-core](https://github.com/modelcontextprotocol/kotlin-sdk) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `0.7.1` -> `0.7.2` | | [io.modelcontextprotocol:kotlin-sdk-client](https://github.com/modelcontextprotocol/kotlin-sdk) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `0.7.0` -> `0.7.2` | | [com.google.errorprone:error_prone_annotations](https://errorprone.info) ([source](https://github.com/google/error-prone)) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.41.0` -> `2.42.0` | | [software.amazon.awssdk:sdk-core](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.33.13` -> `2.34.0` | | [software.amazon.awssdk:sqs](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.33.13` -> `2.34.0` | | [software.amazon.awssdk:s3](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.33.13` -> `2.34.0` | | [software.amazon.awssdk:regions](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.33.13` -> `2.34.0` | | [software.amazon.awssdk:dynamodb-enhanced](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.33.13` -> `2.34.0` | | [software.amazon.awssdk:dynamodb](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.33.13` -> `2.34.0` | | [software.amazon.awssdk:aws-core](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.33.13` -> `2.34.0` | | [software.amazon.awssdk:bom](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.33.13` -> `2.34.0` | | [software.amazon.awssdk:auth](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.33.13` -> `2.34.0` | --- ### Release Notes <details> <summary>mockito/mockito (org.mockito:mockito-core)</summary> ### [`v5.20.0`](https://github.com/mockito/mockito/releases/tag/v5.20.0) <sup><sup>*Changelog generated by [Shipkit Changelog Gradle Plugin](https://github.com/shipkit/shipkit-changelog)*</sup></sup> ##### 5.20.0 - 2025-09-20 - [11 commit(s)](mockito/mockito@v5.19.0...v5.20.0) by Adrian-Kim, Giulio Longfils, Rafael Winterhalter, dependabot\[bot] - Bump org.assertj:assertj-core from 3.27.4 to 3.27.5 [(#​3730)](mockito/mockito#3730) - Introducing the Ability to Mock Construction of Generic Types ([#​2401](mockito/mockito#2401)) [(#​3729)](mockito/mockito#3729) - Bump com.gradle.develocity from 4.1.1 to 4.2 [(#​3726)](mockito/mockito#3726) - Bump graalvm/setup-graalvm from 1.3.6 to 1.3.7 [(#​3725)](mockito/mockito#3725) - Bump org.eclipse.platform:org.eclipse.osgi from 3.23.100 to 3.23.200 [(#​3720)](mockito/mockito#3720) - Bump graalvm/setup-graalvm from 1.3.5 to 1.3.6 [(#​3719)](mockito/mockito#3719) - Bump actions/setup-java from 4 to 5 [(#​3715)](mockito/mockito#3715) - Bump com.gradle.develocity from 4.1 to 4.1.1 [(#​3713)](mockito/mockito#3713) - Bump bytebuddy from 1.17.6 to 1.17.7 [(#​3712)](mockito/mockito#3712) - test: Use Assume.assumeThat for SequencedCollection tests [(#​3711)](mockito/mockito#3711) - Fix [#​3709](mockito/mockito#3709) [(#​3710)](mockito/mockito#3710) - feat: Add support for JDK21 Sequenced Collections. [(#​3708)](mockito/mockito#3708) - Introducing the Ability to Mock Construction of Generic Types [(#​2401)](mockito/mockito#2401) </details> <details> <summary>modelcontextprotocol/kotlin-sdk (io.modelcontextprotocol:kotlin-sdk-server)</summary> ### [`v0.7.2`](https://github.com/modelcontextprotocol/kotlin-sdk/releases/tag/0.7.2) [Compare Source](modelcontextprotocol/kotlin-sdk@0.7.1...0.7.2) ##### What's Changed - migration from `jreleaser` to `mavenPublish` plugin by [@​devcrocod](https://github.com/devcrocod) in [#​277](modelcontextprotocol/kotlin-sdk#277) - Generate test report by [@​kpavlov](https://github.com/kpavlov) in [#​271](modelcontextprotocol/kotlin-sdk#271) - Move `generateLibVersion` task to `kotlin-sdk-core` by [@​devcrocod](https://github.com/devcrocod) in [#​274](modelcontextprotocol/kotlin-sdk#274) - [#​196](modelcontextprotocol/kotlin-sdk#196) Update build configuration and workflows for enhanced local publ… by [@​kpavlov](https://github.com/kpavlov) in [#​275](modelcontextprotocol/kotlin-sdk#275) - Add Stdio coverage for integration tests by [@​skarpovdev](https://github.com/skarpovdev) in [#​276](modelcontextprotocol/kotlin-sdk#276) - Bump io.kotest:kotest-assertions-json from 5.9.1 to 6.0.3 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​247](modelcontextprotocol/kotlin-sdk#247) - migration from `jreleaser` to `mavenPublish` plugin by [@​devcrocod](https://github.com/devcrocod) in [#​277](modelcontextprotocol/kotlin-sdk#277) **Full Changelog**: <modelcontextprotocol/kotlin-sdk@0.7.1...0.7.2> </details> <details> <summary>google/error-prone (com.google.errorprone:error_prone_annotations)</summary> ### [`v2.42.0`](https://github.com/google/error-prone/releases/tag/v2.42.0): Error Prone 2.42.0 New checks: - [`ExplicitArrayForVarargs`](https://errorprone.info/bugpattern/ExplicitArrayForVarargs): discourage unnecessary explicit construction of an array to provide varargs. - [`FloggerPerWithoutRateLimit`](https://errorprone.info/bugpattern/FloggerPerWithoutRateLimit): discourage Flogger's `perUnique` without rate limiting - [`StringJoin`](https://errorprone.info/bugpattern/StringJoin): Ban `String.join(CharSequence)` and `String.join(CharSequence, CharSequence)` - [`ThreadBuilderNameWithPlaceholder`](https://errorprone.info/bugpattern/ThreadBuilderNameWithPlaceholder): Do not allow placeholders in `Thread.Builder.name(String)` or `name(String, int)`. Changes: - The return type of `ASTHelpers.asFlagSet` has changed. The previous type was `EnumSet<Flags.Flag>`, where `Flags.Flag` is an enum in the javac class `Flags`. A recent JDK change has replaced that enum with a new top-level enum called `FlagsEnum`. It is not possible to change `ASTHelpers.asFlagSet` in a way that would be type-safe and compatible with the enums from JDKs both before and after the change. Instead, the method now returns `ImmutableSet<String>`, where the strings come from the `toString()` of the enum constants. That means they are `"native"`, `"abstract"`, etc. - Flag `IO.print[ln]()` in [`SystemOut`](https://errorprone.info/bugpattern/SystemOut). Full changelog: <google/error-prone@v2.41.0...v2.42.0> </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 6pm every weekday,before 2am every weekday" in timezone Australia/Melbourne, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). GitOrigin-RevId: 8ecb809cff408a555b4ee0773a9fb8cdca50b95c
### What changes were proposed in this pull request? This PR aims to upgrade `mockito` to 5.20.0 for Apache Spark K8s Operator `v0.6`. ### Why are the changes needed? To bring the latest features and bug fixes. - https://github.com/mockito/mockito/releases/tag/v5.20.0 - mockito/mockito#3729 - mockito/mockito#3709 - https://github.com/mockito/mockito/releases/tag/v5.19.0 - mockito/mockito#3708 - mockito/mockito#3659 ### Does this PR introduce _any_ user-facing change? No behavior change. ### How was this patch tested? Pass the CIs. ### Was this patch authored or co-authored using generative AI tooling? No. Closes #358 from dongjoon-hyun/SPARK-53770. Authored-by: Dongjoon Hyun <dongjoon@apache.org> Signed-off-by: Dongjoon Hyun <dongjoon@apache.org>
MockedStatic and MockedConstruction threw a MockitoException when the provided type was itself parameterized, suggesting to use a raw type instead. For instance,
MockedConstruction<MyGenericType<String>>was not allowed.This commit allows to mock generic types without throwing an exception and without forcing users to deal with
raw use of parameterized classwarnings.Fixes #2401
Checklist
including project members to get a better picture of the change
commit is meaningful and help the people that will explore a change in 2 years
./gradlew spotlessApplyfor auto-formatting)Fixes #<issue number>in the description if relevantFixes #<issue number>if relevant