在开发一组日期计算和语言规则来将数字值和日期转换为字符串时,我正在编写测试用例来断言字符串格式化方法的输出结果。一个虚构的断言可能看起来像这样:
在编写测试时,我正在开发一组日期计算和语言规则,用于将数字值和日期转化为字符串,并编写测试用例来验证字符串格式化方法的输出结果。
NSAssert([dateString isEqualToString:@"Three days, until 6:00 PM"], @"Date string should match expectation");
但是,由于该应用程序已本地化为多种语言,并且我的其他开发人员也来自不同的区域设置,可能会出现您的设备或模拟器与编写测试所用的区域设置不同的情况。在这种情况下,dateString
的内容可能是这样的:
@"Drie dagen, tot 18:00" // the assertion fails
@"Drei Tage, bis 18 Uhr" // the assertion also fails
这可能或可能不是这些区域设置的正确日期注释,但我的问题是如何能够在使用类似于以下代码的Apple API时运行特定地区设置的测试:
[NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterNoStyle timeStyle:NSDateFormatterShortStyle];
我希望我的论述可以涉及到两种或更多语言,就像这样:
[NSSomething actionToSetTheLocaleTo:@"en_US"];
dateString = ...; // the formatting
NSAssert([dateString isEqualToString:@"Three days, until 6:00 PM"], @"match en_US");
[NSSomething actionToSetTheLocaleTo:@"nl_NL"];
dateString = ...; // the formatting
NSAssert([dateString isEqualToString:@"Drie dagen, tot 18:00"], @"match nl_NL");
谁知道如何实现这个效果?
注:
- 更改首选语言不够,还需要影响NSDateFormatter和NSNumberFormatter的行为。
- 由于这只是用于单元测试目的,我可以使用私有API。但是,为了其他人的利益,公共API更好。
- 传递自定义区域设置到每个日期或数字格式化API可能是最后的考虑,但我发布此问题希望避免采取这些极端措施。如果您确实知道这是唯一的解决方案,请提供一些参考文献,我将不再浪费时间。
有关此主题的链接:
+[NSLocale currentLocale]
?当然,只有在NSDateFormatter
也内部使用此方法时才能起作用。 - Desmond