小编Ree*_*o96的帖子

Swift - 使用XCTest来测试包含闭包的函数

我对Swift相当新,我正在尝试编写一个单元测试(使用XCTest)来测试以下函数:

func login(email: String, password: String)  {

    Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
        if let _error = error {
            print(_error.localizedDescription)
        } else {
            self.performSegue(identifier: "loginSeg")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的研究已经确定我需要使用XCTestExpectation功能,因为默认情况下XCTest同步执行意味着它不会等待闭包完成运行(如果我错了请纠正我).

什么让我失望是我如何测试登录功能,因为它本身调用异步函数Auth.auth().signIn().我正在尝试测试signIn是否成功.

如果这已经得到回答,我很抱歉,但我找不到直接解决这个问题的答案.

谢谢

更新:

在答案和进一步研究的帮助下,我通过登录功能进行了修改,以使用转义闭包:

func login(email: String, password: String, completion: @escaping(Bool)->())  {

    Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
        if let _error = error {
            print(_error.localizedDescription)
            completion(false)
        } else {
            self.performSegue(identifier: "loginSeg")
            completion(true)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我按以下方式测试:

func testLoginSuccess() {

    // other setup

    let exp …
Run Code Online (Sandbox Code Playgroud)

testing xcode ios xctest swift

6
推荐指数
1
解决办法
1060
查看次数

标签 统计

ios ×1

swift ×1

testing ×1

xcode ×1

xctest ×1