diff --git a/bunit.AutoMocker.Tests/SealedTypesTests.cs b/bunit.AutoMocker.Tests/SealedTypesTests.cs new file mode 100644 index 0000000..0ca90c8 --- /dev/null +++ b/bunit.AutoMocker.Tests/SealedTypesTests.cs @@ -0,0 +1,20 @@ +using bunit.BlazorTestApp.Components; +using Bunit.AutoMocker; + +namespace bunit.AutoMocker.Tests; + +public sealed class SealedTypesTests : AutoMockerTestBase +{ + [Fact] + public void WhenSealedDependencyIsNotHandledByAutoMocker_ThrowsInvalidOperationException() + { + // Arrange + var sut = new AutoMockerServiceProvider(Mocker); + + // Act + var result = sut.GetService(typeof(MySealedDependency)); + + // Assert + Assert.Null(result); + } +} diff --git a/bunit.AutoMocker/AutoMockerServiceProvider.cs b/bunit.AutoMocker/AutoMockerServiceProvider.cs index 0e949a6..91675f2 100644 --- a/bunit.AutoMocker/AutoMockerServiceProvider.cs +++ b/bunit.AutoMocker/AutoMockerServiceProvider.cs @@ -11,6 +11,10 @@ public class AutoMockerServiceProvider(Moq.AutoMock.AutoMocker mocker, params Ty public object? GetService(Type serviceType) { + // Never attempt to mock sealed classes + if (serviceType.IsSealed) + return null; + return _typesToExclude.Contains(serviceType) ? null : _mocker.Get(serviceType); diff --git a/bunit.BlazorTestApp/Components/MySealedDependency.cs b/bunit.BlazorTestApp/Components/MySealedDependency.cs new file mode 100644 index 0000000..db6603a --- /dev/null +++ b/bunit.BlazorTestApp/Components/MySealedDependency.cs @@ -0,0 +1,5 @@ +namespace bunit.BlazorTestApp.Components; + +public sealed class MySealedDependency +{ +}