Ensure incorrect implementations of ISerializable are caught properly #370
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 #340.
Moq tries to work around DynamicProxy's refusal to proxy types that implement
ISerializable
improperly. It does so by defaulting toEmptyDefaultValueProvider
for such types (which will never try to mock them, but simply returnsnull
instead).Moq's logic to detect bad
ISerializable
implementations however is currently faulty itself: It checks for the presence of a deserialization constructor and/or a virtualGetObjectData
method without first checking whether the type in question implementsISerializable
.This issue gets fixed here. All necessary logic is moved to
SerializableTypesValueProvider
where it belongs. Additionally, tests are added that document why that class was added to Moq in the first place.