Skip to content

Commit 5174d33

Browse files
authored
Merge pull request #1 from codijk/fix/service_provider
Add option to exclude types with AutoMocker
2 parents f51640a + 1f7973c commit 5174d33

9 files changed

Lines changed: 122 additions & 60 deletions

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,23 @@ public class AutoMockerTestContextTests : AutoMockerTestContext
8686
}
8787
```
8888

89+
When a certain type should not be handled by AutoMocker, a list of types can be provided via the constructor to exclude:
90+
``` cs
91+
public class ExcludeTypesTests : AutoMockerTestContext
92+
{
93+
public ExcludeTypesTests() : base(typeof(IMyOtherDependency))
94+
{ }
95+
96+
[Fact]
97+
public void WhenUnregisteredDependencyIsNotHandledByAutoMocker_ThrowsInvalidOperationException()
98+
{
99+
// Arrange
100+
Mocker.Use<IMydependency>(x => x.GetSomeValue() == "Hello World");
101+
102+
// Act & Assert
103+
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
104+
}
105+
}
106+
```
107+
89108
[0]:https://github.com/moq/Moq.AutoMocker
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using Bunit.AutoMocker;
2+
using Microsoft.AspNetCore.Components;
3+
4+
namespace bunit.AutoMocker.Tests;
5+
6+
public abstract class AutoMockerTestBase(params Type[] typesToExclude)
7+
: AutoMockerTestContext(typesToExclude.Union(new[] { typeof(IComponentActivator) }).ToArray())
8+
{ }
Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
using bunit.BlazorTestApp.Components;
2-
using Bunit;
3-
using Bunit.AutoMocker;
4-
using Microsoft.Extensions.DependencyInjection;
52

63
namespace bunit.AutoMocker.Tests;
74

8-
public class AutoMockerTestContextTests : AutoMockerTestContext
5+
public class AutoMockerTestContextTests : AutoMockerTestBase
96
{
107
[Fact]
118
public void CreatesUnregisteredDependencies()
@@ -20,44 +17,3 @@ public void CreatesUnregisteredDependencies()
2017
Assert.Contains(cut.Markup, "Hello World");
2118
}
2219
}
23-
24-
public class WithoutAutoMockerTests : TestContext
25-
{
26-
[Fact]
27-
public void Fails_WhenDependenciesAreUnregistered()
28-
{
29-
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
30-
}
31-
32-
[Fact]
33-
public void Fails_WhenAllOnlyUsedDependencyIsRegisterd()
34-
{
35-
// Arrange
36-
var myDependency = new Moq.Mock<IMydependency>();
37-
myDependency.Setup(x => x.GetSomeValue()).Returns("Hello World");
38-
39-
Services.AddSingleton<IMydependency>(myDependency.Object);
40-
41-
// Act & Assert
42-
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
43-
}
44-
45-
[Fact]
46-
public void Succeeds_WhenAllDependenciesAreRegistered()
47-
{
48-
// Arrange
49-
var myDependency = new Moq.Mock<IMydependency>();
50-
myDependency.Setup(x => x.GetSomeValue()).Returns("Hello World");
51-
52-
Services.AddSingleton<IMydependency>(myDependency.Object);
53-
54-
var myOtherDependency = new Moq.Mock<IMyOtherDependency>();
55-
Services.AddSingleton<IMyOtherDependency>(myOtherDependency.Object);
56-
57-
// Act
58-
var cut = RenderComponent<Routes>();
59-
60-
// Assert
61-
Assert.Contains(cut.Markup, "Hello World");
62-
}
63-
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using bunit.BlazorTestApp.Components;
2+
3+
namespace bunit.AutoMocker.Tests;
4+
5+
public sealed class ExcludeTypesTests : AutoMockerTestBase
6+
{
7+
public ExcludeTypesTests() : base(typeof(IMyOtherDependency))
8+
{ }
9+
10+
[Fact]
11+
public void WhenUnregisteredDependencyIsNotHandledByAutoMocker_ThrowsInvalidOperationException()
12+
{
13+
// Arrange
14+
Mocker.Use<IMydependency>(x => x.GetSomeValue() == "Hello World");
15+
16+
// Act & Assert
17+
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
18+
}
19+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using bunit.BlazorTestApp.Components;
2+
using Bunit;
3+
using Microsoft.Extensions.DependencyInjection;
4+
5+
namespace bunit.AutoMocker.Tests;
6+
7+
public class WithoutAutoMockerTests : TestContext
8+
{
9+
[Fact]
10+
public void Fails_WhenDependenciesAreUnregistered()
11+
{
12+
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
13+
}
14+
15+
[Fact]
16+
public void Fails_WhenAllOnlyUsedDependencyIsRegisterd()
17+
{
18+
// Arrange
19+
var myDependency = new Moq.Mock<IMydependency>();
20+
myDependency.Setup(x => x.GetSomeValue()).Returns("Hello World");
21+
22+
Services.AddSingleton<IMydependency>(myDependency.Object);
23+
24+
// Act & Assert
25+
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
26+
}
27+
28+
[Fact]
29+
public void Succeeds_WhenAllDependenciesAreRegistered()
30+
{
31+
// Arrange
32+
var myDependency = new Moq.Mock<IMydependency>();
33+
myDependency.Setup(x => x.GetSomeValue()).Returns("Hello World");
34+
35+
Services.AddSingleton<IMydependency>(myDependency.Object);
36+
37+
var myOtherDependency = new Moq.Mock<IMyOtherDependency>();
38+
Services.AddSingleton<IMyOtherDependency>(myOtherDependency.Object);
39+
40+
// Act
41+
var cut = RenderComponent<Routes>();
42+
43+
// Assert
44+
Assert.Contains(cut.Markup, "Hello World");
45+
}
46+
}

bunit.AutoMocker.Tests/bunit.AutoMocker.Tests.csproj

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,16 @@
1010
</PropertyGroup>
1111

1212
<ItemGroup>
13-
<PackageReference Include="coverlet.collector" Version="6.0.0" />
14-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
15-
<PackageReference Include="xunit" Version="2.5.3" />
16-
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
13+
<PackageReference Include="coverlet.collector" Version="6.0.4">
14+
<PrivateAssets>all</PrivateAssets>
15+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
16+
</PackageReference>
17+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
18+
<PackageReference Include="xunit" Version="2.9.3" />
19+
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.4">
20+
<PrivateAssets>all</PrivateAssets>
21+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
22+
</PackageReference>
1723
</ItemGroup>
1824

1925
<ItemGroup>
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
24

35
namespace Bunit.AutoMocker;
46

5-
public class AutoMockerServiceProvider(Moq.AutoMock.AutoMocker mocker) : IServiceProvider
7+
public class AutoMockerServiceProvider(Moq.AutoMock.AutoMocker mocker, params Type[] typesToExclude) : IServiceProvider
68
{
7-
private readonly Moq.AutoMock.AutoMocker Mocker = mocker;
9+
private readonly HashSet<Type> _typesToExclude = typesToExclude.ToHashSet();
10+
private readonly Moq.AutoMock.AutoMocker _mocker = mocker;
811

9-
public object GetService(Type serviceType)
12+
public object? GetService(Type serviceType)
1013
{
11-
return Mocker.Get(serviceType);
14+
return _typesToExclude.Contains(serviceType)
15+
? null
16+
: _mocker.Get(serviceType);
1217
}
1318
}
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
namespace Bunit.AutoMocker;
1+
using System;
2+
3+
namespace Bunit.AutoMocker;
24

35
public abstract class AutoMockerTestContext : TestContext
46
{
57
protected readonly Moq.AutoMock.AutoMocker Mocker = new();
68

7-
public AutoMockerTestContext() : this(new Moq.AutoMock.AutoMocker()) { }
9+
public AutoMockerTestContext(params Type[] typesToExclude) : this(new Moq.AutoMock.AutoMocker(), typesToExclude) { }
810

9-
public AutoMockerTestContext(Moq.AutoMock.AutoMocker mocker)
11+
public AutoMockerTestContext(Moq.AutoMock.AutoMocker mocker, params Type[] typesToExclude)
1012
{
1113
Mocker = mocker;
12-
Services.AddFallbackServiceProvider(new AutoMockerServiceProvider(Mocker));
14+
Services.AddFallbackServiceProvider(new AutoMockerServiceProvider(Mocker, typesToExclude));
1315
}
1416
}

bunit.AutoMocker/bunit.AutoMocker.csproj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
<TargetFramework>netstandard2.1</TargetFramework>
55
<langversion>latest</langversion>
66
<PackageId>Snerte.bunit.AutoMocker</PackageId>
7-
<Version>0.0.2</Version>
7+
<Version>0.0.3</Version>
88
<Authors>Maarten Göertz</Authors>
99
<PackageDescription>This pacakge combines AutoMocker with bunit</PackageDescription>
1010
<RepositoryUrl>https://github.com/snerte/bunit.AutoMocker</RepositoryUrl>
11+
<Nullable>enable</Nullable>
1112
</PropertyGroup>
1213

1314

@@ -16,7 +17,7 @@
1617
</PropertyGroup>
1718

1819
<ItemGroup>
19-
<PackageReference Include="bunit" Version="1.26.64" />
20+
<PackageReference Include="bunit" Version="1.40.0" />
2021
<PackageReference Include="Moq.AutoMock" Version="3.5.0" />
2122
</ItemGroup>
2223

@@ -25,7 +26,7 @@
2526
</PropertyGroup>
2627

2728
<ItemGroup>
28-
<None Include="../README.md" Pack="true" PackagePath=""/>
29+
<None Include="../README.md" Pack="true" PackagePath="" />
2930
</ItemGroup>
3031

3132
</Project>

0 commit comments

Comments
 (0)