Почему XCTest с ожиданием на основе предикатов так медленно? - PullRequest
1 голос
/ 09 апреля 2020

Кто-нибудь знает, почему ожидания XCTest с предикатами так медленны? Мне кажется, что минимальное время выполнения для Swift и Obj C составляет 1 секунду, даже если предикат должен пройти немедленно. Превращение моих ожиданий в if !pred.evaluate(with:obj) ускорение выполнения теста на несколько порядков.

import XCTest

struct TestObject {
  var value = true
}

class SwiftPredicateTestTests: XCTestCase {
  func testPerformanceExample() {
    let obj = TestObject()
    self.measure {
      let pred = NSPredicate{(evaluatedObject, _) in
        return (evaluatedObject as! TestObject).value
      }
      let expect = expectation(for: pred, evaluatedWith: obj, handler: nil)
      wait(for: [expect], timeout: 30)
    }
  }
}
measured [Time, seconds] average: 1.013, relative standard deviation: 2.464%, values: [1.087598, 1.002806, 1.003474, 1.001123, 1.004604, 1.007821, 1.004224, 1.005046, 1.005243, 1.007546],

1 Ответ

0 голосов
/ 09 апреля 2020

Этот эффект также заметен в методе waitForExistence. Они, вероятно, используют sleep(1) перед проверкой состояния в циклах.

...