dav*_*avy 5 c# unit-testing cultureinfo
我遇到过其他开发人员编写的一些单元测试,这些测试经常使用Assert.AreEqual像这样的重载版本:
Assert.AreEqual(stringparamX, stringParamY, true, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
stringParamX在单元测试中设置,并且stringparamY将是被测系统的结果.
可能会将此代码移植到其他国家/地区,并且可以执行这些测试.但是,在查看MSDN文档文档时,我不禁想到传入CultureInfo.InvariantCulture这里会增加一些不必要的复杂性.如果在其他文化中执行,我不确定它会对测试产生什么样的影响.
在我的情况下,在单元测试的上下文中,我为什么要(或不)写这样的断言?
如果您将区域性指定为 ,则没有理由使用该重载InvariantCulture,因为这是默认值。
从这里的文档:
使用不变文化进行比较。
请注意,在某些情况下,如果您不使用 ,则会产生影响InvariantCulture,其中最臭名昭著的是“土耳其语 I 问题”。
下面的代码说明了这个问题:
Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
Assert.AreEqual("i", "I", true, CultureInfo.CurrentCulture); // This throws.
Assert.AreEqual("i", "I", true, CultureInfo.InvariantCulture); // This doesn't throw.
Assert.AreEqual("i", "I", true); // This doesn't throw.
Run Code Online (Sandbox Code Playgroud)
但是,请注意,您不会受到影响,因为您使用的是不变区域性。
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |