解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
2.48 KiB
X
using NewLife.Log;
using Xunit;

namespace XUnitTest.Log;

/// <summary>写日志事件参数测试</summary>
public class WriteLogEventArgsTests
{
    [Fact(DisplayName = "默认构造函数")]
    public void DefaultConstructor()
    {
        var args = new WriteLogEventArgs();
        Assert.Null(args.Message);
        Assert.Null(args.Exception);
        Assert.Equal(0, args.ThreadID);
    }

    [Fact(DisplayName = "Set设置级别")]
    public void SetLevel()
    {
        var args = new WriteLogEventArgs();
        var result = args.Set(LogLevel.Warn);

        Assert.Same(args, result);
        Assert.Equal(LogLevel.Warn, args.Level);
    }

    [Fact(DisplayName = "Set设置消息和异常")]
    public void SetMessageAndException()
    {
        var args = new WriteLogEventArgs();
        var ex = new InvalidOperationException("test");
        var result = args.Set("hello {0}", ex);

        Assert.Same(args, result);
        Assert.Equal("hello {0}", args.Message);
        Assert.Same(ex, args.Exception);
    }

    [Fact(DisplayName = "Current线程静态实例")]
    public void CurrentThreadStatic()
    {
        var current = WriteLogEventArgs.Current;
        Assert.NotNull(current);

        // 同一线程应返回同一实例
        var current2 = WriteLogEventArgs.Current;
        Assert.Same(current, current2);
    }

    [Fact(DisplayName = "不同线程不同实例")]
    public void DifferentThreadDifferentInstance()
    {
        var current1 = WriteLogEventArgs.Current;
        WriteLogEventArgs? current2 = null;

        var t = new Thread(() => current2 = WriteLogEventArgs.Current);
        t.Start();
        t.Join();

        Assert.NotNull(current2);
        Assert.NotSame(current1, current2);
    }

    [Fact(DisplayName = "属性可读写")]
    public void PropertiesReadWrite()
    {
        var args = new WriteLogEventArgs
        {
            Level = LogLevel.Error,
            Message = "test message",
            ThreadID = 42,
            IsPool = true,
            IsWeb = false,
            ThreadName = "Worker",
            TaskID = 100,
            Time = new DateTime(2025, 1, 1)
        };

        Assert.Equal(LogLevel.Error, args.Level);
        Assert.Equal("test message", args.Message);
        Assert.Equal(42, args.ThreadID);
        Assert.True(args.IsPool);
        Assert.False(args.IsWeb);
        Assert.Equal("Worker", args.ThreadName);
        Assert.Equal(100, args.TaskID);
        Assert.Equal(new DateTime(2025, 1, 1), args.Time);
    }
}