Conversation
…Wrap Co-authored-by: vbreuss <3438234+vbreuss@users.noreply.github.com>
Co-authored-by: vbreuss <3438234+vbreuss@users.noreply.github.com>
Co-authored-by: vbreuss <3438234+vbreuss@users.noreply.github.com>
Mock.Wrap
There was a problem hiding this comment.
Pull request overview
This PR adds runtime validation to ensure only supported types can be mocked or wrapped, providing clear error messages when unsupported types are used. The changes standardize error messages and add specific validation for Mock.Wrap to enforce interface-only wrapping.
- Standardized error message format to
"Unable to [mock|wrap] type 'TypeName'. [Reason]." - Added new
ThrowIfNotWrappablemethod to validate thatMock.Wraponly accepts interfaces - Added runtime tests validating rejection of classes and delegates in
Mock.Wrap
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| Tests/Mockolate.Tests/MockTests.cs | Updated expected error messages for sealed class validation to use new standardized format |
| Tests/Mockolate.Tests/MockTests.WrapTests.cs | Added tests for Mock.Wrap with unsupported types (classes, delegates) and a new test delegate type |
| Tests/Mockolate.Tests/MockTests.FactoryTests.cs | Updated expected error messages for factory sealed class validation to use new standardized format |
| Source/Mockolate.SourceGenerators/Sources/Sources.cs | Implemented ThrowIfNotWrappable method, updated XML documentation to specify interface requirement, and standardized error message format |
|
🚀 Benchmark ResultsDetails
|
|
This is addressed in release v0.44.0. |



Mockolate now throws
MockExceptionwith clear error messages when attempting to mock or wrap unsupported types (enums, structs, sealed classes, or non-interface types for wrapping).Changes
ThrowIfNotMockable: Added runtime checks for enums and value types with specific error messagesThrowIfNotWrappable: Enforces thatMock.Wraponly accepts interfaces, throwing exception for classes, delegates, or other types"Unable to [mock|wrap] type 'TypeName'. [Reason]."Mock.Wrapwith non-interface types (classes, delegates)Example
Validation Layers
where T : classconstraint prevents value typesOriginal prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.