【发布时间】:2016-02-18 23:41:28
【问题描述】:
在 .NET(VB 或 C#)中并使用 Microsoft.VisualStudio.TestTools.UnitTesting 进行单元测试:
如何在单元测试中有效地在本地更改语言环境小数分隔符,以便String.Format("{0:0.0}", aDouble)(AFAIK 依赖于语言环境)生成具有修改语言环境的字符串?强>
编辑: 观察:我不是在问如何输出具有特定语言环境的文本。我在问如何在单元测试中更改语言环境的小数分隔符,以模拟在具有不同小数分隔符的系统中会发生什么。 我不是从单元测试代码中调用 String.Format,而是从测试功能中调用 String.Format。
附加信息:
我正在 VB 中创建一个 .NET 库,并且我有一个类 MyClass 和一个 Encode(...) 函数,其中包括将数字信息作为文本写入。
该组件将用于不同计算机可能对“小数分隔符”(逗号或点)有不同配置的环境。然而,我的组件应该对此不敏感,这意味着它应该始终输出“点”(例如,在格式化数字时使用 System.Globalization.CultureInfo.InvariantCulture)。
我想编写一个单元测试,以确保即使系统区域设置小数分隔符设置为“逗号”而不是“点”,编码功能也能继续工作。我做了一些研究并想出了这样的东西:
公共子编码_CultureWithCommaSeparator_OutputMatchesTemplate() ... Dim oldCulture = Threading.Thread.CurrentThread.CurrentCulture ' 使用 "," 作为小数分隔符的区域性 Threading.Thread.CurrentThread.CurrentCulture = 新的 Globalization.CultureInfo("es-ES") 比较编码到模板(...) Threading.Thread.CurrentThread.CurrentCulture = oldCulture 结束子CompareEncodedToTemplate 函数将使用MyClass.Encode 方法将信息写入MemoryStream,然后每行将其与模板文本文件 行进行比较,测试将失败当它们不相等时。
我想要“模拟”的是当语言环境的小数点分隔符不同于“点”时Encode 函数将如何运行。显然我的测试功能没有像我预期的那样工作:
我在我设置的小数点分隔符指向的计算机上运行测试,并且测试成功,所以我认为“我的编码功能将按我的意愿工作,因为测试通过了”。
然后我在小数点分隔符设置为逗号的计算机上运行了测试,但测试失败了。我意识到这是因为在我的Encode 逻辑中,我在格式化双精度时错过了使用InvariantCulture。这意味着我的测试没有按预期工作,因为我应该能够在第一台计算机上检测到这种情况(因为这是我想要创建测试的原因)。
提前谢谢你。
标签: c# .net vb.net unit-testing locale