Skip to content

Commit d4bc4dd

Browse files
ascott18Keboo
andauthored
Implement System.IServiceProvider in AutoMocker. (#128)
* #127 - Implement `System.IServiceProvider` in `AutoMocker`. * Add tests Co-authored-by: Kevin B <[email protected]>
1 parent 534fabb commit d4bc4dd

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

Moq.AutoMock.Tests/DescribeGetMock.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,22 @@ public void It_allows_getting_mocked_object_when_overriden()
6565
Assert.IsNotNull(@protected);
6666
Assert.IsInstanceOfType(@protected, typeof(ProtectedConstructor1));
6767
}
68+
69+
[TestMethod]
70+
public void It_gets_mocked_object_via_iserviceprovider()
71+
{
72+
IServiceProvider mocker = new AutoMocker();
73+
var service = mocker.GetService(typeof(Empty));
74+
Assert.IsNotNull(service);
75+
Assert.IsInstanceOfType(service, typeof(Empty));
76+
}
77+
78+
[TestMethod]
79+
public void It_returns_null_for_unmockable_object_via_iserviceprovider()
80+
{
81+
IServiceProvider mocker = new AutoMocker();
82+
var service = mocker.GetService(typeof(string));
83+
Assert.IsNull(service);
84+
}
6885
}
6986
}

Moq.AutoMock/AutoMocker.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace Moq.AutoMock
1818
/// <summary>
1919
/// An auto-mocking IoC container that generates mock objects using Moq.
2020
/// </summary>
21-
public partial class AutoMocker
21+
public partial class AutoMocker : IServiceProvider
2222
{
2323
/// <summary>
2424
/// Initializes an instance of AutoMockers.
@@ -441,6 +441,14 @@ internal bool TryGet(
441441
return false;
442442
}
443443

444+
/// <inheritdoc />
445+
object? IServiceProvider.GetService(Type serviceType)
446+
{
447+
return TryGet(serviceType, new ObjectGraphContext(false), out IInstance? service)
448+
? service.Value
449+
: null;
450+
}
451+
444452
#endregion Get
445453

446454
#region GetMock

0 commit comments

Comments
 (0)