针对文化/全球化问题设计测试

本文关键字:测试 问题 全球化 文化 | 更新日期: 2023-09-27 18:02:50

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

我通常有两个投入来源;输入到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));

[问题]

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

我应该麻烦吗?即在法语键盘上输入的字符串CCD_ 3将始终等于在中文键盘上输入CCD_?

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

针对文化/全球化问题设计测试

ToString方法在字符串上使用IFormatProvider本质上是no-op。文档说明"返回此字符串实例;不执行实际转换。">

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