更改一个单元测试类的区域设置



我正在测试涉及小数点计算的函数。我制作了独立的单元测试用例类。一种是测试逗号小数点","通常在欧洲国家使用。另一个用于测试带有小数点"."的计算。

如何更改特定测试类的区域设置?我已尝试使用此代码将区域设置更改为使用","作为小数分隔符。

extension NSLocale {
@objc
static let currentLocale = NSLocale(localeIdentifier: "en_TR") // Set a needed locale
}

然而,它永久性地改变了所有测试用例的区域设置,包括用于测试的类。我还尝试将上面的代码添加到我的其他测试类中,但这是不允许的。

谢谢

这更像是一个评论,但是太大了,不能作为评论发布。我认为您的实际问题是实际代码缺乏可测试性。因此,与其为测试寻找解决可测试性问题的方法,不如重构实际的函数,将locale作为参数,默认设置为Locale.current(或任何您期望的默认设置)。例如:

func someCalcWithDecimalPoint(/* some arguments ,*/locale: Locale = Locale.current) {
// ...
}

func someCalcWithDecimalPoint(/* some arguments ,*/withLocale: Locale? = nil) {

let locale = withLocale ?? Locale.current 
// ...
}

这样,您的产品代码不会改变,但是您的测试可以验证任何语言环境,而不需要一些阴暗的工作区,并且您的代码也是可读的。