未验证 提交 af71fcca 编写于 作者: G Günther Foidl 提交者: GitHub

Added tests for LoggerMessage.Define with skipEnabledCheck (#50773)

上级 dfeb707f
......@@ -191,6 +191,38 @@ public void LogMessages(Delegate messageDelegate, int argumentCount)
var actualLogValues = Assert.IsAssignableFrom<IReadOnlyList<KeyValuePair<string, object>>>(write.State);
AssertLogValues(expectedValues, actualLogValues.ToList());
Assert.Equal(expectedToString, actualLogValues.ToString());
Assert.Equal(2, testLogger.IsEnabledCallCount);
}
[Theory]
[MemberData(nameof(LogMessagesDataSkipEnabledCheck))]
public void LogMessagesSkipEnabledCheck(Delegate messageDelegate, int argumentCount)
{
// Arrange
var testSink = new TestSink();
var testLogger = new TestLogger("testlogger", testSink, enabled: true);
var exception = new Exception("TestException");
var parameterNames = Enumerable.Range(0, argumentCount).Select(i => "P" + i).ToArray();
var parameters = new List<object>();
parameters.Add(testLogger);
parameters.AddRange(parameterNames);
parameters.Add(exception);
var expectedFormat = "Log " + string.Join(" ", parameterNames.Select(p => "{" + p + "}"));
var expectedToString = "Log " + string.Join(" ", parameterNames);
var expectedValues = parameterNames.Select(p => new KeyValuePair<string, object>(p, p)).ToList();
expectedValues.Add(new KeyValuePair<string, object>("{OriginalFormat}", expectedFormat));
// Act
messageDelegate.DynamicInvoke(parameters.ToArray());
// Assert
Assert.Single(testSink.Writes);
var write = testSink.Writes.First();
var actualLogValues = Assert.IsAssignableFrom<IReadOnlyList<KeyValuePair<string, object>>>(write.State);
AssertLogValues(expectedValues, actualLogValues.ToList());
Assert.Equal(expectedToString, actualLogValues.ToString());
Assert.Equal(1, testLogger.IsEnabledCallCount);
}
[Fact]
......@@ -392,6 +424,17 @@ public void DefineAndDefineScope_ThrowsException_WhenFormatString_IsNull(Delegat
new object[] { LoggerMessage.Define<string, string, string, string, string, string>(LogLevel.Error, 6, "Log {P0} {P1} {P2} {P3} {P4} {P5}"), 6 },
};
public static IEnumerable<object[]> LogMessagesDataSkipEnabledCheck => new[]
{
new object[] { LoggerMessage.Define(LogLevel.Error, 0, "Log ", skipEnabledCheck: true), 0 },
new object[] { LoggerMessage.Define<string>(LogLevel.Error, 1, "Log {P0}", skipEnabledCheck: true), 1 },
new object[] { LoggerMessage.Define<string, string>(LogLevel.Error, 2, "Log {P0} {P1}", skipEnabledCheck: true), 2 },
new object[] { LoggerMessage.Define<string, string, string>(LogLevel.Error, 3, "Log {P0} {P1} {P2}", skipEnabledCheck: true), 3 },
new object[] { LoggerMessage.Define<string, string, string, string>(LogLevel.Error, 4, "Log {P0} {P1} {P2} {P3}", skipEnabledCheck: true), 4 },
new object[] { LoggerMessage.Define<string, string, string, string, string>(LogLevel.Error, 5, "Log {P0} {P1} {P2} {P3} {P4}", skipEnabledCheck: true), 5 },
new object[] { LoggerMessage.Define<string, string, string, string, string, string>(LogLevel.Error, 6, "Log {P0} {P1} {P2} {P3} {P4} {P5}", skipEnabledCheck: true), 6 },
};
private delegate Delegate Define(LogLevel logLevel, EventId eventId, string formatString);
private delegate Delegate DefineScope(string formatString);
private static object[] DefineInvalidParameters => new object[] { LogLevel.Error, new EventId(0), null };
......
......@@ -25,6 +25,7 @@ public TestLogger(string name, ITestSink sink, Func<LogLevel, bool> filter)
}
public string Name { get; set; }
public int IsEnabledCallCount { get; private set; }
public IDisposable BeginScope<TState>(TState state)
{
......@@ -60,6 +61,7 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
public bool IsEnabled(LogLevel logLevel)
{
IsEnabledCallCount++;
return logLevel != LogLevel.None && _filter(logLevel);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册