You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何测试非负字段结构体的区域性相关ToString方法

Size结构体ToString相关方法单元测试实现方案

不需要找系统预置的特殊区域文化,直接自定义CultureInfo修改非负数字的格式化规则即可,最稳定的实现是修改NumberFormatInfo的NativeDigits属性,替换默认阿拉伯数字为自定义字符,这种方式对非负整数同样生效,完全适配Size字段不能为负的约束。

测试逻辑说明

  • 验证ToString():构造自定义文化,将0-9对应的数字显示字符替换为自定义的特殊字符,设置为当前线程当前文化后调用方法,验证输出中的数字使用了自定义字符,同时固化输出的整体结构(属性名、包裹符号、分隔符格式)
  • 验证ToStringInvariant():同样将上述自定义文化设置为线程当前文化,调用方法后验证输出数字始终为标准阿拉伯数字,不受当前线程文化影响
  • 所有测试用例必须在finally块中还原线程原始文化配置,避免污染其他测试的运行环境

测试代码示例

[Test]
public void Size_ToString_UsesCurrentCultureFormat()
{
    Size testSize = new Size(12, 34);
    var originalCulture = Thread.CurrentThread.CurrentCulture;
    try
    {
        // 基于en-US构造自定义文化,关闭用户自定义配置覆盖保证测试稳定性
        CultureInfo customCulture = new CultureInfo("en-US", useUserOverride: false);
        // 将0-9的默认数字替换为带圈数字,制造和固定文化的格式差异
        customCulture.NumberFormat.NativeDigits = new string[]
        {
            "⓪","①","②","③","④","⑤","⑥","⑦","⑧","⑨"
        };
        Thread.CurrentThread.CurrentCulture = customCulture;

        string output = testSize.ToString();
        Assert.That(output == "{Width=①②, Height=③④}");
    }
    finally
    {
        Thread.CurrentThread.CurrentCulture = originalCulture;
    }
}

[Test]
public void Size_ToStringInvariant_AlwaysUsesInvariantCulture()
{
    Size testSize = new Size(12, 34);
    var originalCulture = Thread.CurrentThread.CurrentCulture;
    try
    {
        CultureInfo customCulture = new CultureInfo("en-US", useUserOverride: false);
        customCulture.NumberFormat.NativeDigits = new string[]
        {
            "⓪","①","②","③","④","⑤","⑥","⑦","⑧","⑨"
        };
        Thread.CurrentThread.CurrentCulture = customCulture;

        string output = testSize.ToStringInvariant();
        // 固定文化不受自定义配置影响,始终输出标准阿拉伯数字
        Assert.That(output == "{Width=12, Height=34}");
    }
    finally
    {
        Thread.CurrentThread.CurrentCulture = originalCulture;
    }
}

方案优势

  • 不依赖操作系统预置的区域文化数据,跨Windows、Linux、macOS平台运行结果一致,不会因为系统文化定义差异、版本更新导致测试随机失败
  • 完全覆盖两个测试要求:既固化了方法输出的固定结构,避免后续迭代出现格式变更,也明确验证了两个方法的文化使用逻辑
  • 无需构造负数值,完全适配Size的Width/Height仅允许非负数的约束

内容的提问来源于stack exchange,提问作者Eugeniy Maksimov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:54:19