v9.10.2019.0101  全面巩固批量Insert/Update/Upsert,支持数据备份、恢复和同步,支持实体列表保存到文件以及加载
大石头 authored at 2019-01-01 13:38:33
1.83 KiB
X
using NewLife;
using NewLife.Serialization;
using NewLife.Xml;
using Xunit;

namespace XUnitTest.Serialization;

public class XmlTests
{
    [Fact]
    public void ToXml_BasicObject()
    {
        var obj = new XmlModel { Name = "test", Value = 42 };
        var result = XmlHelper.ToXml(obj);

        Assert.NotNull(result);
        Assert.Contains("test", result);
        Assert.Contains("42", result);
    }

    [Fact]
    public void ToXmlEntity_BasicObject()
    {
        var xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?><XmlModel><Name>hello</Name><Value>99</Value></XmlModel>";
        var result = XmlHelper.ToXmlEntity<XmlModel>(xmlStr);

        Assert.NotNull(result);
        Assert.Equal("hello", result.Name);
        Assert.Equal(99, result.Value);
    }

    [Fact]
    public void ToXml_ToXmlEntity_RoundTrip()
    {
        var original = new XmlModel { Name = "roundtrip", Value = 123 };
        var xmlStr = XmlHelper.ToXml(original);
        var restored = XmlHelper.ToXmlEntity<XmlModel>(xmlStr);

        Assert.NotNull(restored);
        Assert.Equal(original.Name, restored.Name);
        Assert.Equal(original.Value, restored.Value);
    }

    [Fact(DisplayName = "高精度Decimal往返不丢精度")]
    public void Decimal_RoundTrip()
    {
        // 超过 Double 15-17 位有效数字,经 Double 中转必丢精度
        var original = new DecimalModel { Amount = 1234567890123456789.123456789m };
        var xmlStr = XmlHelper.ToXml(original);
        var restored = XmlHelper.ToXmlEntity<DecimalModel>(xmlStr);

        Assert.NotNull(restored);
        Assert.Equal(original.Amount, restored.Amount);
    }

    private class DecimalModel
    {
        public Decimal Amount { get; set; }
    }

    private class XmlModel
    {
        public String? Name { get; set; }
        public Int32 Value { get; set; }
    }
}