【问题标题】:Designing Tests for Culture/Globalisation problems为文化/全球化问题设计测试
【发布时间】:2013-03-07 14:07:51
【问题描述】:

我担心我的应用程序在处理不同文化中的字符串输入时的可预测性。这是旧软件中的问题,我不希望它成为新软件中的问题。

我通常有两种输入来源;输入到 WPF 应用程序和 Streams 中的字符串,从文件加载,包含文本。这些培养出来的字符串一般在使用前都会被输入到模型中

public struct MyModel
{
    public String Name;
}

我想设计一个有意义的测试,以确保当 Result DoSomething(MyModel model); 包含在不同机器上输入的文本时,某些逻辑实际上可以处理它。

但是我怎样才能展示差异很重要的案例呢?

例如以下失败。

 var inNativeCulture= "[Something12345678.9:1] {YeS/nO}";
 var inChineseCulture = inNativeCulture.ToString(new CultureInfo("zh-CN"));
 Assert.That(inChineseCulture, Is.Not.EqualTo(inNativeCulture));

[问题]

如果字符串未转换为 InvarientCulture,我如何测试 DoSomething 以使测试能够失败?

我应该打扰吗?即在法语键盘上输入的字符串Something 总是等于在中文键盘上输入的Something

我可以测试什么来缓解全球化问题?

【问题讨论】:

    标签: c# string unit-testing globalization culture


    【解决方案1】:

    在字符串上采用 IFormatProvider 的 ToString 方法本质上是无操作的。文档说明"Returns this instance of String; no actual conversion is performed."

    由于您担心避免问题,这里有一些一般性建议。首先,明确区分前端(面向用户)字符串和后端(数据库、线路、文件等)字符串是非常有帮助的。应根据用户的文化/应用程序语言生成/接受前端字符串。这些字符串不应该被持久化(除了少数例外,比如当你生成一个只能由人而不是机器读取的文档时)。后端字符串应始终使用不会随时间改变的标准格式。如果您接受用于生成/解析全球化字符串的数据发生变化的事实,那么您将通过确保不保留面向用户的字符串来将自己与影响隔离开来。

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多