-
Notifications
You must be signed in to change notification settings - Fork 5
/
LoggingTestWithInjectedFactory.cs
76 lines (64 loc) · 2.64 KB
/
LoggingTestWithInjectedFactory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.Logging;
using Xunit;
namespace SampleWebApplicationSerilog.Tests
{
public class LoggingTestWithInjectedFactory : IClassFixture<CustomWebApplicationFactory<Startup>>
{
private readonly CustomWebApplicationFactory<Startup> _factory;
public LoggingTestWithInjectedFactory(CustomWebApplicationFactory<Startup> factory)
{
_factory = factory;
// In this case, the factory will be reused for all tests, so the sink will be shared as well.
// We can clear the sink before each test execution, as xUnit will not run this tests in parallel.
_factory.GetTestLoggerSink().Clear();
// When running on 2.x, the server is not initialized until it is explicitly started or the first client is created.
// So we need to use:
// if (_factory.TryGetTestLoggerSink(out var testLoggerSink)) testLoggerSink.Clear();
}
[Fact]
public async Task ShouldLogHelloWorld()
{
// Arrange
// Act
await _factory.CreateDefaultClient().GetAsync("/");
// Assert
var log = Assert.Single(_factory.GetTestLoggerSink().LogEntries);
// Assert the message rendered by a default formatter
Assert.Equal("Hello World!", log.Message);
}
[Fact]
public async Task ShouldUseScope()
{
// Arrange
// Act
await _factory.CreateDefaultClient().GetAsync("/");
// Assert
var log = Assert.Single(_factory.GetTestLoggerSink().LogEntries);
var scope = Assert.Single(log.Scopes);
// Assert the scope rendered by a default formatter
Assert.Equal("I'm in the GET scope", scope.Message);
}
[Fact]
public async Task ShouldBeginScope()
{
// Arrange
// Act
await _factory.CreateDefaultClient().GetAsync("/");
// Assert
var scope = Assert.Single(_factory.GetTestLoggerSink().Scopes);
// Assert the scope rendered by a default formatter
Assert.Equal("I'm in the GET scope", scope.Message);
}
}
public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<TStartup>
where TStartup : class
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.UseTestLogging(options => options.FilterByNamespace(nameof(SampleWebApplicationSerilog)));
}
}
}