Swift 使用Mockingjay中断HTTP请求不起作用

Swift 使用Mockingjay中断HTTP请求不起作用,swift,xcode-ui-testing,stub,Swift,Xcode Ui Testing,Stub,我试图理解如何编写UI测试,但我似乎无法让HTTP存根正常工作。当我运行测试时,我看不到来自存根的数据,而是来自API的数据 我在Xcode 10.2和9.4.1中尝试过它,所以这不是因为它在Xcode 10中不再工作 我一定在什么地方做错了什么,但我不知道是什么 我创建了一个简单的示例来检查这是否是因为我在一个大项目中工作,有什么东西干扰了我,但这不起作用 在我的viewcontroller中,我有一个简单的tableview设置,它执行API调用,并将结果加载到行中。我有一个UI测试目标,它

我试图理解如何编写UI测试,但我似乎无法让HTTP存根正常工作。当我运行测试时,我看不到来自存根的数据,而是来自API的数据

我在Xcode 10.2和9.4.1中尝试过它,所以这不是因为它在Xcode 10中不再工作

我一定在什么地方做错了什么,但我不知道是什么

我创建了一个简单的示例来检查这是否是因为我在一个大项目中工作,有什么东西干扰了我,但这不起作用

在我的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上尝试了这个

编辑:也不适用于OHttpStubs。在示例项目中添加了分支
OHHTTPStubs


编辑:我在macOS Mojave 10.14.3上,我使用Xcode 10.2和9.4.1进行测试。我尝试了运行iOS 12.3的iPhone和运行iOS 12.2的模拟器,你不能使用Mockingjay来进行UI测试,因为Xguitest运行在不同的进程中。您需要一个库来启动一个小型http服务器并用您的模拟响应。例如,或

我现在使用Swifter对其进行了测试,这确实是一个问题。非常感谢。我没有意识到单元测试和UI测试彼此如此不同。