设计文化/全球化问题的测试

时间:2013-03-07 14:07:52

标签: c# string unit-testing globalization culture

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

我通常有两种输入来源;字符串输入到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));

[问题]

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

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

我可以测试哪些内容可以缓解全球化问题?

1 个答案:

答案 0 :(得分:3)

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

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