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

namespace XUnitTest.Collections;

public class NullableDictionaryTests
{
    [Fact(DisplayName = "不存在的键返回默认值")]
    public void MissingKey_ReturnsDefault()
    {
        var dic = new NullableDictionary<String, String>();

        var result = dic["nonexistent"];

        Assert.Null(result);
    }

    [Fact(DisplayName = "值类型不存在的键返回默认值")]
    public void MissingKey_ValueType_ReturnsDefault()
    {
        var dic = new NullableDictionary<String, Int32>();

        var result = dic["nonexistent"];

        Assert.Equal(0, result);
    }

    [Fact(DisplayName = "正常存取")]
    public void SetAndGet()
    {
        var dic = new NullableDictionary<String, String>();
        dic["key"] = "value";

        Assert.Equal("value", dic["key"]);
    }

    [Fact(DisplayName = "覆盖已有值")]
    public void OverwriteValue()
    {
        var dic = new NullableDictionary<String, Int32>();
        dic["key"] = 1;
        dic["key"] = 2;

        Assert.Equal(2, dic["key"]);
    }

    [Fact(DisplayName = "自定义比较器")]
    public void CustomComparer()
    {
        var dic = new NullableDictionary<String, String>(StringComparer.OrdinalIgnoreCase);
        dic["Key"] = "Value";

        Assert.Equal("Value", dic["key"]);
        Assert.Equal("Value", dic["KEY"]);
    }

    [Fact(DisplayName = "从已有字典构造")]
    public void CtorFromDictionary()
    {
        var source = new Dictionary<String, Int32>
        {
            ["a"] = 1,
            ["b"] = 2
        };
        var dic = new NullableDictionary<String, Int32>(source);

        Assert.Equal(1, dic["a"]);
        Assert.Equal(2, dic["b"]);
        Assert.Equal(0, dic["c"]);
    }

    [Fact(DisplayName = "从已有字典和比较器构造")]
    public void CtorFromDictionaryAndComparer()
    {
        var source = new Dictionary<String, String>
        {
            ["name"] = "test"
        };
        var dic = new NullableDictionary<String, String>(source, StringComparer.OrdinalIgnoreCase);

        Assert.Equal("test", dic["NAME"]);
    }

    [Fact(DisplayName = "Count正确")]
    public void CountTest()
    {
        var dic = new NullableDictionary<Int32, String>();
        dic[1] = "one";
        dic[2] = "two";

        Assert.Equal(2, dic.Count);
    }

    [Fact(DisplayName = "TryGetValue存在的键")]
    public void TryGetValue_Exists()
    {
        var dic = new NullableDictionary<String, Int32>();
        dic["key"] = 42;

        Assert.True(dic.TryGetValue("key", out var val));
        Assert.Equal(42, val);
    }

    [Fact(DisplayName = "TryGetValue不存在的键")]
    public void TryGetValue_NotExists()
    {
        var dic = new NullableDictionary<String, String>();

        Assert.False(dic.TryGetValue("missing", out var val));
        Assert.Null(val);
    }

    [Fact(DisplayName = "ContainsKey检查")]
    public void ContainsKeyTest()
    {
        var dic = new NullableDictionary<String, Int32>();
        dic["yes"] = 1;

        Assert.True(dic.ContainsKey("yes"));
        Assert.False(dic.ContainsKey("no"));
    }

    [Fact(DisplayName = "Remove移除")]
    public void RemoveTest()
    {
        var dic = new NullableDictionary<String, String>();
        dic["key"] = "val";

        Assert.True(dic.Remove("key"));
        Assert.Null(dic["key"]);
    }
}