我试图了解如何编写UI测试,但似乎无法使HTTP stub 正常工作。运行测试时,看不到 stub 中的数据,而是API的数据。

我已经在Xcode 10.2和9.4.1中尝试过它,所以不是因为它不再在Xcode 10中起作用。

我一定在某处做错了,但我不知道该怎么办。

我创建了一个最小的示例来检查是否是因为我在一个大项目中工作并且有什么干扰,但是那没有用。

您可以在此处找到整个最小项目:https://github.com/vrwim/TestingTest

在我的viewcontroller中,我有一个简单的tableview设置,该设置执行API调用,并将结果加载到行中。我有一个UI测试目标,该目标具有一个简单的测试设置,该测试使用Mockingjay stub HTTP请求。

我的API调用代码:

func callSimpleAPI(completionHandler: @escaping ([Patient]?, Error?) -> ()) {
    let url = URL(string: "https://pastebin.com/raw/3PusWbw6")!

    let task = URLSession.shared.dataTask(with: url) { data, response, error in
        DispatchQueue.main.async {
            guard let data = data else {
                completionHandler(nil, error!)
                return
            }

            do {
                let patientResponse = try JSONDecoder().decode(TherapistPatientResponse.self, from: data)
                completionHandler(patientResponse.patients, nil)
            } catch {
                completionHandler(nil, error)
            }
        }
    }
    task.resume()
}

而我的测试代码:
override func setUp() {
    let app = XCUIApplication()
    app.launch()

    stub(everything, json(/*A json representation of the API response that I want to see*/))
}

编辑:我在运行iOS 12.3 beta和模拟器(非beta)的iPhone上尝试了此操作。

编辑:也不与OHHTTPStubs一起使用。在示例项目中添加了一个OHHTTPStubs分支。

编辑:我在macOS Mojave 10.14.3上,并且我使用Xcode 10.2和9.4.1进行测试。我尝试了运行iOS 12.3的iPhone和运行iOS 12.2的模拟器

编辑:我在我的最小示例中添加了一个失败的测试,如果网络 stub 正常,该测试应该通过。

最佳答案

您不能使用Mockingjay进行UI测试的 stub ,因为XCUITests在不同的进程中运行。您需要一个启动小型http服务器并以模拟响应的库。例如https://github.com/httpswift/swifterhttps://github.com/envoy/Embassy

10-05 20:40
查看更多