Files
2024-12-27 13:49:16 +08:00

159 lines
5.0 KiB
C#

using System;
using System.IO;
using System.Linq;
using System.Threading;
using Masuit.Tools.Logging;
using Xunit;
namespace Masuit.Tools.Abstractions.Test.Logging;
public class LogManagerTests
{
private readonly string _logDirectory;
public LogManagerTests()
{
_logDirectory = Path.Combine(Path.GetTempPath(), "logs");
LogManager.LogDirectory = _logDirectory;
if (Directory.Exists(_logDirectory))
{
Directory.Delete(_logDirectory, true);
}
Directory.CreateDirectory(_logDirectory);
}
[Fact]
public void Info_ShouldWriteInfoLog()
{
LogManager.Info("Test info message");
Thread.Sleep(2000); // 等待日志写入
var logFile = Directory.GetFiles(_logDirectory).FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("INFO", logContent);
Assert.Contains("Test info message", logContent);
}
[Fact]
public void Info_WithSource_ShouldWriteInfoLog()
{
LogManager.Info("TestSource", "Test info message");
Thread.Sleep(2000); // 等待日志写入
var logFile = Directory.GetFiles(_logDirectory).FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("INFO", logContent);
Assert.Contains("TestSource", logContent);
Assert.Contains("Test info message", logContent);
}
[Fact]
public void Debug_ShouldWriteDebugLog()
{
LogManager.Debug("Test debug message");
Thread.Sleep(2000); // 等待日志写入
var logFile = Directory.GetFiles(_logDirectory).FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("DEBUG", logContent);
Assert.Contains("Test debug message", logContent);
}
[Fact]
public void Debug_WithSource_ShouldWriteDebugLog()
{
LogManager.Debug("TestSource", "Test debug message");
Thread.Sleep(2000); // 等待日志写入
var logFile = Directory.GetFiles(_logDirectory).FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("DEBUG", logContent);
Assert.Contains("TestSource", logContent);
Assert.Contains("Test debug message", logContent);
}
[Fact]
public void Error_ShouldWriteErrorLog()
{
var exception = new Exception("Test error message");
LogManager.Error(exception);
Thread.Sleep(2000); // 等待日志写入
var logFile = Directory.GetFiles(_logDirectory).FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("ERROR", logContent);
Assert.Contains("Test error message", logContent);
}
[Fact]
public void Error_WithSource_ShouldWriteErrorLog()
{
var exception = new Exception("Test error message");
LogManager.Error("TestSource", exception);
Thread.Sleep(2000); // 等待日志写入
var logFile = Directory.GetFiles(_logDirectory).FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("ERROR", logContent);
Assert.Contains("TestSource", logContent);
Assert.Contains("Test error message", logContent);
}
[Fact]
public void Fatal_ShouldWriteFatalLog()
{
var exception = new Exception("Test fatal message");
LogManager.Fatal(exception);
Thread.Sleep(2000); // 等待日志写入
var logFile = Directory.GetFiles(_logDirectory).FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("FATAL", logContent);
Assert.Contains("Test fatal message", logContent);
}
[Fact]
public void Fatal_WithSource_ShouldWriteFatalLog()
{
var exception = new Exception("Test fatal message");
LogManager.Fatal("TestSource", exception);
Thread.Sleep(2000); // 等待日志写入
var logFile = Directory.GetFiles(_logDirectory).FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("FATAL", logContent);
Assert.Contains("TestSource", logContent);
Assert.Contains("Test fatal message", logContent);
}
[Fact]
public void LogDirectory_ShouldSetAndGetLogDirectory()
{
var customLogDirectory = Path.Combine(Path.GetTempPath(), "custom_logs");
LogManager.LogDirectory = customLogDirectory;
Assert.Equal(customLogDirectory, LogManager.LogDirectory);
}
[Fact]
public void Event_ShouldTriggerOnLog()
{
var eventTriggered = false;
LogManager.Event += log => eventTriggered = true;
LogManager.Info("Test info message");
Thread.Sleep(2000); // 等待日志写入
Assert.True(eventTriggered);
}
}