Make It.IsAny
, It.IsNotNull
work for COM types
#361
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes #269:
Testing a COM object's type using
IsAssignableFrom
can report false negatives because .NET might only see the generic RCW type__ComObject
instead of the actual COM interface type. Theis
operator on the other hand appears to be performingQueryInterface
for COM objects to get the right result.This commit introduces an additional branch in
It.IsAny<>
that runs anis
-based check for COM objects, and the as-is reflection-based check for everything else. The added logic takes effect only in builds targeting the full .NET Framework, since COM is not available on all .NET Core platforms.I have successfully verified the new behaviour against a COM object, but am reluctant to add any permanent test code involving COM to Moq. That would tie the unit test project to a Windows platform-specific facility. (It's possible to work around this by running a test conditionally, depending on the value of
Environment.OSVersion.Platform
, but that seems a little hacky.)