Improve output for expected argument matchers#806
Conversation
957259f to
e4bdaed
Compare
aa3cd12 to
50401f7
Compare
- Add IDescribeSpecification to allow custom arg matchers to provide custom output for "expected to receive" entries. - Fallback to ToString when IDescribeSpecification not implemented. - Update code comment docs accordingly. Relates to nsubstitute#796.
- use string.Empty for null value from IDescribeSpecification, rather than falling back to ToString(). This supports the contract that IDescribeSpecification will be used if implemented. Replacing null string.Empty with matches the documented behaviour of IDescribeNonMatches. - updated IDescribeSpecification code docs. - removed GenericToNonGenericMatcherProxyWithDescribe `ToString` as it can use the GenericToNonGenericMatcherProxy superclass implementation. - update ArgumentSpecification to also support IDescribeSpecification for its matcher. - Replace linq with Array.ConvertAll rather than requiring an extra ToArray conversion.
50401f7 to
72005d0
Compare
zvirja
left a comment
There was a problem hiding this comment.
Looks good to me! Small feature, but could be a good quality of life enhancement
|
One question why do we need |
Yes, I agree it feels like smell. IDK if it is needed, but especially since nullable reference types is enabled in the code and the specified methods are declared to return |
I've merged as-is as the PR is pretty old already, but would be very happy to accept a PR to improve this code. 🙇 |
Updated [NSubstitute](https://github.com/nsubstitute/NSubstitute) from 5.3.0 to 6.0.0. <details> <summary>Release notes</summary> _Sourced from [NSubstitute's releases](https://github.com/nsubstitute/NSubstitute/releases)._ ## 6.0.0 :information_source: No changes from [Release Candidate 1](https://github.com/nsubstitute/NSubstitute/releases/tag/v6.0.0-rc.1). # NSubstitute v6.0.0 From [RC1](https://github.com/nsubstitute/NSubstitute/releases/tag/v6.0.0-rc.1) notes: * [NEW] `ArgMatchers.Matching` predicate matcher as an alternative to `Is(Expression<Predicate<T>>`. (.NET6 and above.) * [UPDATE] Improved support for custom argument matchers. `Arg.Is` now accepts arg matchers. * [UPDATE][BREAKING] Update target frameworks: .NET8, .NET Standard 2.0 * [UPDATE][BREAKING] Remove legacy obsolete API * [UPDATE][BREAKING] Mark as obsolete api CompatArg with pre c# 7.0 support * [UPDATE][BREAKING] Nullability is enabled for public api for .NET 8+ TFMs * [UPDATE] Migrate documentation to [docfx platform](https://github.com/dotnet/docfx) and update samples to NUnit 4 * [NEW] Added NuGet Package README file. ## Full change list * Update target frameworks and other infrastructure changes by @Romfos in nsubstitute/NSubstitute#831 * Remove Google Groups hyperlinks by @304NotModified in nsubstitute/NSubstitute#804 * Improve output for expected argument matchers in nsubstitute/NSubstitute#806 * Mark Substitute.For<T> method as Pure by @Dzliera in nsubstitute/NSubstitute#844 * Move package creating from build.fsproj to github actions by @Romfos in nsubstitute/NSubstitute#838 * Added .NET 9 to test matrix by @Romfos in nsubstitute/NSubstitute#848 * Update dependencies by @Saibamen in nsubstitute/NSubstitute#843 * Migrate documentation to docfx by @Romfos in nsubstitute/NSubstitute#850 * Added test for issue #716 by @rbeurskens in nsubstitute/NSubstitute#846 * feat: add dependabot for this project for minor and patch updates for nuget packages and github actions by @wmundev in nsubstitute/NSubstitute#792 * #853 Fix matching with multiple generic arguments of the same type by @rholek in nsubstitute/NSubstitute#858 * Ability to mock protected methods with and without return value by @Jason31569 in nsubstitute/NSubstitute#845 * Enable nullability for public api by @Romfos in nsubstitute/NSubstitute#856 * Bugfix/async event handlers return instantly by @jmartschinke in nsubstitute/NSubstitute#808 * Fix matching generic calls with AnyType when the generic argument is also a generic argument in return type, out or ref parameter by @JMolenkamp in nsubstitute/NSubstitute#862 * Feature: allow interception of any generic method call when using Arg.AnyType by @JMolenkamp in nsubstitute/NSubstitute#855 * Params arg unit test by @Jason31569 in nsubstitute/NSubstitute#874 * Added exception extensions for ValueTask without return type (rebase) in nsubstitute/NSubstitute#873 * Migrate to slnx by @Romfos in nsubstitute/NSubstitute#882 * Migrate documentation validation from build.fsproj to Roslyn code generator by @Romfos in nsubstitute/NSubstitute#883 * Fix doc links (#884) in nsubstitute/NSubstitute#886 * Add PackageReadmeFile. by @peymanr34 in nsubstitute/NSubstitute#888 * Make public api and tests the same for all TFMs by @Romfos in nsubstitute/NSubstitute#885 * Migrate documentation samples to NUnit4 by @Romfos in nsubstitute/NSubstitute#889 * Run unit tests in Microsoft.Testing.Platform mode by @Romfos in nsubstitute/NSubstitute#896 * Bump actions/checkout from 4 to 5 by @dependabot[bot] in nsubstitute/NSubstitute#902 * Fix typo in return value documentation by @ericmutta in nsubstitute/NSubstitute#903 * Bump actions/setup-dotnet from 4 to 5 by @dependabot[bot] in nsubstitute/NSubstitute#907 * Fix typo in received calls documentation by @ericmutta in nsubstitute/NSubstitute#904 * Simplify github actions to use less jobs by @Romfos in nsubstitute/NSubstitute#911 * Bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in nsubstitute/NSubstitute#916 * Bump NUnit3TestAdapter from 5.0.0 to 5.2.0 by @dependabot[bot] in nsubstitute/NSubstitute#922 ... (truncated) ## 6.0.0-rc.1 # NSubstitute v6.0.0 Release Candidate 1 Due to the large number of changes in this release, we wanted to start with a release candidate to ensure we've correctly captured breaking changes. * [NEW] `ArgMatchers.Matching` predicate matcher as an alternative to `Is(Expression<Predicate<T>>`. (.NET6 and above.) * [UPDATE] Improved support for custom argument matchers. `Arg.Is` now accepts arg matchers. * [UPDATE][BREAKING] Update target frameworks: .NET8, .NET Standard 2.0 * [UPDATE][BREAKING] Remove legacy obsolete API * [UPDATE][BREAKING] Mark as obsolete api CompatArg with pre c# 7.0 support * [UPDATE][BREAKING] Nullability is enabled for public api for .NET 8+ TFMs * [UPDATE] Migrate documentation to [docfx platform](https://github.com/dotnet/docfx) and update samples to NUnit 4 * [NEW] Added NuGet Package README file. ## Full change list * Update target frameworks and other infrastructure changes by @Romfos in nsubstitute/NSubstitute#831 * Remove Google Groups hyperlinks by @304NotModified in nsubstitute/NSubstitute#804 * Improve output for expected argument matchers in nsubstitute/NSubstitute#806 * Mark Substitute.For<T> method as Pure by @Dzliera in nsubstitute/NSubstitute#844 * Move package creating from build.fsproj to github actions by @Romfos in nsubstitute/NSubstitute#838 * Added .NET 9 to test matrix by @Romfos in nsubstitute/NSubstitute#848 * Update dependencies by @Saibamen in nsubstitute/NSubstitute#843 * Migrate documentation to docfx by @Romfos in nsubstitute/NSubstitute#850 * Added test for issue #716 by @rbeurskens in nsubstitute/NSubstitute#846 * feat: add dependabot for this project for minor and patch updates for nuget packages and github actions by @wmundev in nsubstitute/NSubstitute#792 * #853 Fix matching with multiple generic arguments of the same type by @rholek in nsubstitute/NSubstitute#858 * Ability to mock protected methods with and without return value by @Jason31569 in nsubstitute/NSubstitute#845 * Enable nullability for public api by @Romfos in nsubstitute/NSubstitute#856 * Bugfix/async event handlers return instantly by @jmartschinke in nsubstitute/NSubstitute#808 * Fix matching generic calls with AnyType when the generic argument is also a generic argument in return type, out or ref parameter by @JMolenkamp in nsubstitute/NSubstitute#862 * Feature: allow interception of any generic method call when using Arg.AnyType by @JMolenkamp in nsubstitute/NSubstitute#855 * Params arg unit test by @Jason31569 in nsubstitute/NSubstitute#874 * Added exception extensions for ValueTask without return type (rebase) in nsubstitute/NSubstitute#873 * Migrate to slnx by @Romfos in nsubstitute/NSubstitute#882 * Migrate documentation validation from build.fsproj to Roslyn code generator by @Romfos in nsubstitute/NSubstitute#883 * Fix doc links (#884) in nsubstitute/NSubstitute#886 * Add PackageReadmeFile. by @peymanr34 in nsubstitute/NSubstitute#888 * Make public api and tests the same for all TFMs by @Romfos in nsubstitute/NSubstitute#885 * Migrate documentation samples to NUnit4 by @Romfos in nsubstitute/NSubstitute#889 * Run unit tests in Microsoft.Testing.Platform mode by @Romfos in nsubstitute/NSubstitute#896 * Bump actions/checkout from 4 to 5 by @dependabot[bot] in nsubstitute/NSubstitute#902 * Fix typo in return value documentation by @ericmutta in nsubstitute/NSubstitute#903 * Bump actions/setup-dotnet from 4 to 5 by @dependabot[bot] in nsubstitute/NSubstitute#907 * Fix typo in received calls documentation by @ericmutta in nsubstitute/NSubstitute#904 * Simplify github actions to use less jobs by @Romfos in nsubstitute/NSubstitute#911 * Bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in nsubstitute/NSubstitute#916 * Bump NUnit3TestAdapter from 5.0.0 to 5.2.0 by @dependabot[bot] in nsubstitute/NSubstitute#922 * Bump BenchmarkDotNet from 0.15.2 to 0.15.5 by @dependabot[bot] in nsubstitute/NSubstitute#921 * Add .NET 10 to test matrix by @Romfos in nsubstitute/NSubstitute#913 ... (truncated) Commits viewable in [compare view](nsubstitute/NSubstitute@v5.3.0...v6.0.0). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Closes #796.