我试图了解如何编写UI测试,但我似乎无法让HTTP存根工作。当我运行测试时,我没有看到来自存根的数据,而是来自API的数据。
我在Xcode 10.2和9.4.1中尝试过它,所以不是因为它不再适用于Xcode 10。
我必须在某处做错事,但我无法弄清楚是什么。
我创建了一个最小的例子来检查它是否是因为我在一个大项目中工作而且有些东西在干扰,但是这没有用。
你可以在这里找到整个最小的项目:https://github.com/vrwim/TestingTest
在我的viewcontroller中,我有一个简单的tableview设置,它执行API调用,并将结果加载到行中。我有一个UI测试目标,它有一个简单的测试设置,它使用Mockingjay来存根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测试版的iPhone和模拟器(不是测试版)上试过这个。
编辑:也不适用于OHHTTPStubs。在示例项目中添加了分支OHHTTPStubs
。
编辑:我在macOS Mojave 10.14.3上,我使用Xcode 10.2和9.4.1进行测试。我尝试运行iOS 12.3的iPhone和运行iOS 12.2的模拟器
编辑:我添加了一个失败的测试到我的最小例子,如果网络存根工作应该通过。
由于XCUITests在不同的进程中运行,因此您无法使用Mockingjay进行UI测试。您需要一个启动小型http服务器的库,并使用您的模拟进行响应。例如https://github.com/httpswift/swifter
或https://github.com/envoy/Embassy