为测试代码添加多语言支持

对于支持多语言的app来说,测试的时候也要考虑多语言(比如提示消息,文本校验等)

一、创建本地化文件

在项目 info -> Localizations 中添加多语言

如添加”简中”

直接点击 Finish
再添加 “繁中” (方法同上)
结果如下:

然后直接在UITests target中新建文件 , 选择 Resource 中的 Strings File

点击 Next
设置文件名称为 Localizable , 选好 group 和 target :

点击 Create
选中创建 Localizable.strings 文件展开 xcode 右侧栏 , 并选中 Localizable.strings 文件

点击 Localize... button 后:

随便选择一项,进入下一步
然后将右侧三种语言都选上之后 , Localizable.strings 下将出现对应的三个文件 :

二、 书写本地化文件

注意格式 和 结尾的 分号 ;
EN:

ZH_CN:

ZH_TW:
扩展:格式也可以这样写 cancel = "取消";

三、编写测试代码

创建一个 UI Test Case Class , 或者直接在示例的UI Test Case Class 中直接书写, 我们将手机的语言环境设置成 中文 ,然后测试一遍。

测试成功。
code source:

import XCTest
 
class LocalUITests: XCTestCase {        
   
    func testExample() {
        let lb = Bundle(for: LocalUITests.self)
//        也可以这样写
//        let lb = Bundle(for: self.classForCoder)
        let localDone = NSLocalizedString("done", bundle: lb ,comment: "")
        
        print("\nlocalDone : \(localDone)\n")
    }
    
}

注:
let lb = Bundle(for:BaseTest.self) 这里还可以使用继承了 XCTestCase 的基类 BaseTest
如下所示(可以是空类) , 后续的方法会常用到:

import XCTest

class BaseTest : XCTestCase {
    
}

封装扩展

最后我们统一调用一下来展示结果吧 , 偷个懒 ^-^||

import XCTest

class XCUIDemoUITests: XCTestCase {
    
    func testExample() {
        
        print("\n class func localDone : \(Handler.local("done"))\n")
        
        print("\n extension field localDone : \("done".local)\n")
        
        print("\n extension func localDone : \("done".fLocal())\n")

    }
}

测试输出:

完美收工