xctest 使用 NSPredicate 最终替换 Quick/Nimble

Posted

技术标签:

【中文标题】xctest 使用 NSPredicate 最终替换 Quick/Nimble【英文标题】:xctest using NSPredicate to replace eventually of Quick/Nimble 【发布时间】:2017-03-13 23:51:50 【问题描述】:

我正在尝试将下面的测试用例从 quick/nimble 转换为 xctest:

expect(foundation.appGuid).toEventually(equal(guidValue))

以下是我正在使用但测试崩溃的代码:

let successPredicate = NSPredicate(format: "SELF MATCHES %@", guidValue)
    expectation(for: successPredicate, evaluatedWith: foundation.appGuid) 
      return foundation.appGuid == guidValue
    

    waitForExpectations(timeout: 5)  (error) -> Void in
      if error != nil 
        XCTFail("foundation.appGuid NOT Equal to guidValue")
      
    

我在上面的代码中做错了吗?

【问题讨论】:

guidValue 和 appGuid 是同一类型吗? 是的,它们是同一类型 【参考方案1】:

这行得通:

let successPredicate = NSPredicate(format:  "SELF == %@", self.guidValue)
    expectation(for: successPredicate, evaluatedWith: foundation.serviceConfig.appGuid) 
      return foundation.serviceConfig.appGuid == self.guidValue
    

    waitForExpectations(timeout: 5)  (error) -> Void in
      if error != nil 
        XCTFail("foundation.serviceConfig.appGuid NOT Equal to guidValue")
      
    

【讨论】:

使用 == 而不是 MATCHES,因为 MATCHES if 用于正则表达式

以上是关于xctest 使用 NSPredicate 最终替换 Quick/Nimble的主要内容,如果未能解决你的问题,请参考以下文章

在 EarlGrey 中随机选择

如何在 Swift/XCTest 中写入本地文件?

iPhone 4s 设备中的 XCTest 持续集成失败

如何从 XCTest 中的 UI 目标调用主目标中的方法?

在非测试目标中使用 XCTest

如何使用 XCTest 打开 Safari