Skip to content

Instantly share code, notes, and snippets.

View koromiko's full-sized avatar

Shih Ting Huang (Neo) koromiko

View GitHub Profile
class HttpClient {
typealias completeClosure = ( _ data: Data?, _ error: Error?)->Void
private let session: URLSession
init(session: URLSessionProtocol) {
self.session = session
}
func get( url: URL, callback: @escaping completeClosure ) {
let request = NSMutableURLRequest(url: url)
request.httpMethod = "GET"
let task = session.dataTask(with: request) { (data, response, error) in
let task = URLSession.shared.dataTask()
let task = session.dataTask()
class HttpClientTests: XCTestCase {
var httpClient: HttpClient!
let session = MockURLSession()
override func setUp() {
super.setUp()
httpClient = HttpClient(session: session)
}
override func tearDown() {
super.tearDown()
}
func test_get_request_withURL() {
guard let url = URL(string: "https://mockurl") else {
fatalError("URL can't be empty")
}
httpClient.get(url: url) { (success, response) in
// Return data
}
// Assert
}
let task = session.dataTask(with: request) { (data, response, error) in
callback(data, error)
}
task.resume()
class MockURLSession {
private (set) var lastURL: URL?
func dataTask(with request: NSURLRequest, completionHandler: @escaping DataTaskResult) -> URLSessionDataTask {
lastURL = request.url
completionHandler(nextData, successHttpURLResponse(request: request), nextError)
return // dataTask, will be impletmented later
}
}
func test_get_request_withURL() {
guard let url = URL(string: "https://mockurl") else {
fatalError("URL can't be empty")
}
httpClient.get(url: url) { (success, response) in
// Return data
}
XCTAssert(session.lastURL == url)
}
class MockURLSessionDataTask {
func resume() { }
}
class HttpClientTests: XCTestCase {
var httpClient: HttpClient!
let session = MockURLSession()
override func setUp() {
super.setUp()
httpClient = HttpClient(session: session) // Doesn't compile
}
override func tearDown() {
super.tearDown()
}