我正在通过Alamoire测试API。我需要对服务器进行一次调用,以便为集成测试做好准备。完成后,我就可以开始运行测试了。
通常的override setUp()是针对每个测试运行的,所以我不想这样做。
因此,我选择覆盖此处所述的class setUp()https://developer.apple.com/reference/xctest/xctestcase
这一切都很好,但现在,我再也不能使用标准的了。(在waitForExpectations中,我得到几个编译器错误,这些错误告诉我不再调用相同的class override setUp()),因为我是在类方法中,而不是在测试用例中。
为了解决这个问题,我想使用这样的信号量:

class ServiceLayerTests: XCTestCase {
    static var apiService: APIService = APIService()
    let sessionManager = SessionManager(serverTrustPolicyManager: ServerTrustPolicyManager(policies: ["http://localhost:3000/": .disableEvaluation]))
    static var companyManger: UserWebResource?
    static var companyManagerID = -1
    override class func setUp() {
        apiService.baseURL = "http://localhost:3000/"
        beginIntegrationTests()
    }

    class func beginIntegrationTests() {
        var semaphore = DispatchSemaphore(value: 0)
        apiService.beginIntegrationTests(completion: {resource, error in
            if let resource = resource {
                if let manager = resource as? UserWebResource {
                    companyManger = manager
                    companyManagerID = manager.id
                    semaphore.signal()

                }
            }
        })
        _ = semaphore.wait(timeout: DispatchTime.distantFuture)
  }
}

这不起作用。在引擎盖下,有一个对服务器的alamo fire调用,它与用户响应以用于集成测试。我确实看到服务器在旋转,所以我知道实际的通信正在发生,但我从未进入完成闭包。
我怀疑我不明白信号量有多快,不知何故造成了死锁。如果有人有更好的解决方案,我会非常高兴听到的。

最佳答案

有几个编译器错误告诉我不再调用
因为我在一个类方法中,而不是
测试用例
这是有道理的。您可能想要的是重构以使您处于测试用例中:

override class func setUp() {
    apiService.baseURL = "http://localhost:3000/"
}

func testIntegrationTests() {
    let urlExpectation = expectation(description: "INTEGRATION TEST")
    apiService.beginIntegrationTests(completion: {resource, error in
        // ...
        urlExpectation.fulfill()
    })

   // not sure what an acceptable timeout would be, I chose this at random
   waitForExpectations(timeout: 25) { error in
       if let error = error {
           print("Error: \(error.localizedDescription)")
       }
   }
}

有一些好的测试示例的最佳资源之一可以在这里找到:http://nshipster.com/xctestcase/

10-08 09:28
查看更多