1

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

我通常有两个输入来源;输入到 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在中文键盘上输入的?

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

4

1 回答 1

3

对字符串采用 IFormatProvider 的 ToString 方法本质上是无操作的。文档声明“返回此字符串实例;不执行实际转换。”

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

于 2013-03-07T21:06:16.323 回答