2013-03-07 68 views
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

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

回答

3

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

由于您关心的是避免问题,所以提供了一些常规建议。首先,在前端(面向用户的)字符串和后端(数据库,线路,文件等)字符串之间有一个明确的区分是非常有用的。应根据用户的文化/应用语言生成/接受前端字符串。这些字符串不应该被持久化(只有很少的例外,比如当您生成的文档只能被人读取而不能被机器读取时)。后端字符串应始终使用不会随时间而改变的标准格式。如果您接受用于生成/解析全局化字符串的数据更改的事实,那么您将通过确保不保留面向用户的字符串来将自己与效果分离。