Skip to content

Commit 8735d4d

Browse files
committed
Added more tests for the ILogger docs
1 parent 891ea05 commit 8735d4d

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed

Test/UnitTests/TestDataLayer/TestMyLoggerProviderActionOut.cs

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
// Copyright (c) 2020 Jon P Smith, GitHub: JonPSmith, web: http://www.thereformedprogrammer.net/
22
// Licensed under MIT license. See License.txt in the project root for license information.
33

4+
using System;
45
using System.Collections.Generic;
56
using System.Linq;
7+
using System.Runtime.InteropServices.ComTypes;
68
using DataLayer.BookApp.EfCode;
79
using Microsoft.Data.Sqlite;
810
using Microsoft.EntityFrameworkCore;
11+
using Microsoft.Extensions.DependencyInjection;
912
using Microsoft.Extensions.Logging;
1013
using Test.Helpers;
1114
using TestSupport.EfHelpers;
@@ -24,6 +27,118 @@ public TestMyLoggerProviderActionOut(ITestOutputHelper output)
2427
_output = output;
2528
}
2629

30+
class MyService
31+
{
32+
private readonly ILogger _logger;
33+
34+
public MyService(ILogger<MyService> logger)
35+
{
36+
_logger = logger;
37+
}
38+
39+
public void AddInfoLog()
40+
{
41+
_logger.LogInformation("This is a log");
42+
}
43+
}
44+
45+
[Fact]
46+
public void TestDependencyInjectionFailIfNoLogger()
47+
{
48+
//SETUP
49+
var services = new ServiceCollection();
50+
services.AddSingleton<MyService>();
51+
52+
//ATTEMPT
53+
var serviceProvider = services.BuildServiceProvider();
54+
var ex = Assert.Throws<InvalidOperationException>(() => serviceProvider.GetService<MyService>());
55+
56+
//VERIFY
57+
ex.Message.ShouldStartWith("Unable to resolve service");
58+
}
59+
60+
[Fact]
61+
public void TestAddLoggerInDependencyInjection()
62+
{
63+
//SETUP
64+
var services = new ServiceCollection();
65+
services.AddTransient<MyService>();
66+
services.AddLogging();
67+
68+
//ATTEMPT
69+
var serviceProvider = services.BuildServiceProvider();
70+
var myServiceDI = serviceProvider.GetService<MyService>();
71+
72+
//VERIFY
73+
myServiceDI.ShouldNotBeNull();
74+
myServiceDI.AddInfoLog();
75+
}
76+
77+
[Fact]
78+
public void TestAddingLoggerInDependencyInjection()
79+
{
80+
//SETUP
81+
var logs = new List<LogOutput>();
82+
var services = new ServiceCollection();
83+
services.AddTransient<MyService>();
84+
services.AddSingleton<ILogger<MyService>>(x =>
85+
new LoggerFactory(
86+
new[] { new MyLoggerProviderActionOut(l => logs.Add(l)) })
87+
.CreateLogger<MyService>());
88+
89+
//ATTEMPT
90+
var serviceProvider = services.BuildServiceProvider();
91+
var myServiceDI = serviceProvider.GetRequiredService<MyService>();
92+
93+
//VERIFY
94+
logs.Count.ShouldEqual(0);
95+
myServiceDI.AddInfoLog();
96+
logs.Count.ShouldEqual(1);
97+
_output.WriteLine(logs.Single().ToString());
98+
}
99+
100+
class MyOtherService
101+
{
102+
private readonly ILogger _logger;
103+
104+
public MyOtherService(ILogger<MyOtherService> logger)
105+
{
106+
_logger = logger;
107+
}
108+
109+
public void AddInfoLog()
110+
{
111+
_logger.LogInformation("This is a log");
112+
}
113+
}
114+
115+
[Fact]
116+
public void TestAddingLoggerInDependencyInjectionWithAddLogging()
117+
{
118+
//SETUP
119+
var logs = new List<LogOutput>();
120+
var services = new ServiceCollection();
121+
services.AddLogging();
122+
services.AddTransient<MyService>();
123+
services.AddTransient<MyOtherService>();
124+
services.AddSingleton<ILogger<MyService>>(x =>
125+
new LoggerFactory(
126+
new[] { new MyLoggerProviderActionOut(l => logs.Add(l)) })
127+
.CreateLogger<MyService>());
128+
129+
//ATTEMPT
130+
var serviceProvider = services.BuildServiceProvider();
131+
var myServiceDI = serviceProvider.GetRequiredService<MyService>();
132+
var myOtherService = serviceProvider.GetRequiredService<MyOtherService>();
133+
134+
//VERIFY
135+
logs.Count.ShouldEqual(0);
136+
myServiceDI.AddInfoLog();
137+
logs.Count.ShouldEqual(1);
138+
_output.WriteLine(logs.Single().ToString());
139+
myOtherService.AddInfoLog();
140+
}
141+
27142
[Fact]
28143
public void TestDecodeMessageNotSensitiveLogging()
29144
{

0 commit comments

Comments
 (0)