我试图了解如何编写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 beta和模拟器(而非beta)的iPhone上尝试了此操作。
编辑:也不与OHHTTPStubs一起使用。在示例项目中添加了一个分支OHHTTPStubs
。
编辑:我在macOS Mojave 10.14.3上,并且我使用Xcode 10.2和9.4.1进行测试。我尝试了运行iOS 12.3的iPhone和运行iOS 12.2的模拟器
编辑:我在我的最小示例中添加了一个失败的测试,如果网络存根正常,该测试应该通过。
答案 0 :(得分:1)
您不能使用Mockingjay进行UI测试的存根,因为XCUITests在不同的进程中运行。您需要一个启动小型http服务器并以模拟响应的库。例如https://github.com/httpswift/swifter
或https://github.com/envoy/Embassy