Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,23 @@ public class AutoMockerTestContextTests : AutoMockerTestContext
}
```

When a certain type should not be handled by AutoMocker, a list of types can be provided via the constructor to exclude:
``` cs
public class ExcludeTypesTests : AutoMockerTestContext
{
public ExcludeTypesTests() : base(typeof(IMyOtherDependency))
{ }

[Fact]
public void WhenUnregisteredDependencyIsNotHandledByAutoMocker_ThrowsInvalidOperationException()
{
// Arrange
Mocker.Use<IMydependency>(x => x.GetSomeValue() == "Hello World");

// Act & Assert
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
}
}
```

[0]:https://github.com/moq/Moq.AutoMocker
8 changes: 8 additions & 0 deletions bunit.AutoMocker.Tests/AutoMockerTestBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using Bunit.AutoMocker;
using Microsoft.AspNetCore.Components;

namespace bunit.AutoMocker.Tests;

public abstract class AutoMockerTestBase(params Type[] typesToExclude)
: AutoMockerTestContext(typesToExclude.Union(new[] { typeof(IComponentActivator) }).ToArray())
{ }
46 changes: 1 addition & 45 deletions bunit.AutoMocker.Tests/AutoMockerTestContextTests.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
using bunit.BlazorTestApp.Components;
using Bunit;
using Bunit.AutoMocker;
using Microsoft.Extensions.DependencyInjection;

namespace bunit.AutoMocker.Tests;

public class AutoMockerTestContextTests : AutoMockerTestContext
public class AutoMockerTestContextTests : AutoMockerTestBase
{
[Fact]
public void CreatesUnregisteredDependencies()
Expand All @@ -20,44 +17,3 @@ public void CreatesUnregisteredDependencies()
Assert.Contains(cut.Markup, "Hello World");
}
}

public class WithoutAutoMockerTests : TestContext
{
[Fact]
public void Fails_WhenDependenciesAreUnregistered()
{
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
}

[Fact]
public void Fails_WhenAllOnlyUsedDependencyIsRegisterd()
{
// Arrange
var myDependency = new Moq.Mock<IMydependency>();
myDependency.Setup(x => x.GetSomeValue()).Returns("Hello World");

Services.AddSingleton<IMydependency>(myDependency.Object);

// Act & Assert
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
}

[Fact]
public void Succeeds_WhenAllDependenciesAreRegistered()
{
// Arrange
var myDependency = new Moq.Mock<IMydependency>();
myDependency.Setup(x => x.GetSomeValue()).Returns("Hello World");

Services.AddSingleton<IMydependency>(myDependency.Object);

var myOtherDependency = new Moq.Mock<IMyOtherDependency>();
Services.AddSingleton<IMyOtherDependency>(myOtherDependency.Object);

// Act
var cut = RenderComponent<Routes>();

// Assert
Assert.Contains(cut.Markup, "Hello World");
}
}
19 changes: 19 additions & 0 deletions bunit.AutoMocker.Tests/ExcludeTypesTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using bunit.BlazorTestApp.Components;

namespace bunit.AutoMocker.Tests;

public sealed class ExcludeTypesTests : AutoMockerTestBase
{
public ExcludeTypesTests() : base(typeof(IMyOtherDependency))
{ }

[Fact]
public void WhenUnregisteredDependencyIsNotHandledByAutoMocker_ThrowsInvalidOperationException()
{
// Arrange
Mocker.Use<IMydependency>(x => x.GetSomeValue() == "Hello World");

// Act & Assert
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
}
}
46 changes: 46 additions & 0 deletions bunit.AutoMocker.Tests/WithoutAutoMockerTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using bunit.BlazorTestApp.Components;
using Bunit;
using Microsoft.Extensions.DependencyInjection;

namespace bunit.AutoMocker.Tests;

public class WithoutAutoMockerTests : TestContext
{
[Fact]
public void Fails_WhenDependenciesAreUnregistered()
{
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
}

[Fact]
public void Fails_WhenAllOnlyUsedDependencyIsRegisterd()
{
// Arrange
var myDependency = new Moq.Mock<IMydependency>();
myDependency.Setup(x => x.GetSomeValue()).Returns("Hello World");

Services.AddSingleton<IMydependency>(myDependency.Object);

// Act & Assert
Assert.Throws<InvalidOperationException>(() => RenderComponent<Routes>());
}

[Fact]
public void Succeeds_WhenAllDependenciesAreRegistered()
{
// Arrange
var myDependency = new Moq.Mock<IMydependency>();
myDependency.Setup(x => x.GetSomeValue()).Returns("Hello World");

Services.AddSingleton<IMydependency>(myDependency.Object);

var myOtherDependency = new Moq.Mock<IMyOtherDependency>();
Services.AddSingleton<IMyOtherDependency>(myOtherDependency.Object);

// Act
var cut = RenderComponent<Routes>();

// Assert
Assert.Contains(cut.Markup, "Hello World");
}
}
14 changes: 10 additions & 4 deletions bunit.AutoMocker.Tests/bunit.AutoMocker.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="xunit" Version="2.5.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
Expand Down
13 changes: 9 additions & 4 deletions bunit.AutoMocker/AutoMockerServiceProvider.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;

namespace Bunit.AutoMocker;

public class AutoMockerServiceProvider(Moq.AutoMock.AutoMocker mocker) : IServiceProvider
public class AutoMockerServiceProvider(Moq.AutoMock.AutoMocker mocker, params Type[] typesToExclude) : IServiceProvider
{
private readonly Moq.AutoMock.AutoMocker Mocker = mocker;
private readonly HashSet<Type> _typesToExclude = typesToExclude.ToHashSet();
private readonly Moq.AutoMock.AutoMocker _mocker = mocker;

public object GetService(Type serviceType)
public object? GetService(Type serviceType)
{
return Mocker.Get(serviceType);
return _typesToExclude.Contains(serviceType)
? null
: _mocker.Get(serviceType);
}
}
10 changes: 6 additions & 4 deletions bunit.AutoMocker/AutoMockerTestContext.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
namespace Bunit.AutoMocker;
using System;

namespace Bunit.AutoMocker;

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

public AutoMockerTestContext() : this(new Moq.AutoMock.AutoMocker()) { }
public AutoMockerTestContext(params Type[] typesToExclude) : this(new Moq.AutoMock.AutoMocker(), typesToExclude) { }

public AutoMockerTestContext(Moq.AutoMock.AutoMocker mocker)
public AutoMockerTestContext(Moq.AutoMock.AutoMocker mocker, params Type[] typesToExclude)
{
Mocker = mocker;
Services.AddFallbackServiceProvider(new AutoMockerServiceProvider(Mocker));
Services.AddFallbackServiceProvider(new AutoMockerServiceProvider(Mocker, typesToExclude));
}
}
7 changes: 4 additions & 3 deletions bunit.AutoMocker/bunit.AutoMocker.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
<TargetFramework>netstandard2.1</TargetFramework>
<langversion>latest</langversion>
<PackageId>Snerte.bunit.AutoMocker</PackageId>
<Version>0.0.2</Version>
<Version>0.0.3</Version>
<Authors>Maarten Göertz</Authors>
<PackageDescription>This pacakge combines AutoMocker with bunit</PackageDescription>
<RepositoryUrl>https://github.com/snerte/bunit.AutoMocker</RepositoryUrl>
<Nullable>enable</Nullable>
</PropertyGroup>


Expand All @@ -16,7 +17,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="bunit" Version="1.26.64" />
<PackageReference Include="bunit" Version="1.40.0" />
<PackageReference Include="Moq.AutoMock" Version="3.5.0" />
</ItemGroup>

Expand All @@ -25,7 +26,7 @@
</PropertyGroup>

<ItemGroup>
<None Include="../README.md" Pack="true" PackagePath=""/>
<None Include="../README.md" Pack="true" PackagePath="" />
</ItemGroup>

</Project>
Loading