Replacer 是一个易于使用的库,用于桩 (stub) HTTP 请求和方法调配。
具体来说,URLSession 的响应可以被替换为任何 JSON、Data 等等...
它使用 方法链 来设置桩 (stub)。
import Replacer
import TestReplacer
class SampleTests: XCTestCase {
func testJSONFile() {
// register a stub
self.urlStub.url("echo.jsontest.com").json(["test": "data"])
// load sample.json & register a stub.
self.urlStub.json(filename: "sample")
let expectation = self.expectation(description: "")
let url = URL(string: "http://echo.jsontest.com/key/value/one/two")!
URLSession(configuration: .default).dataTask(with: url) { data, _, _ in
let json = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String: String]
XCTAssert(json["test"] == "data")
expectation.fulfill()
}.resume()
self.waitForExpectations(timeout: 0.02, handler: nil)
}
}
class SampleSpecs: QuickSpec {
override func spec() {
describe("Quick compatibility test") {
context("using JSON file") {
beforeEach() {
// wait for 1.5s
self.urlStub.url("echo.jsontest.com/[a-z]+/.*")
.httpMethod(.post)
.json(["test": "data"])
.delay(1.5)
}
it("returns mock data") {
var json: [String: String]?
Alamofire.request("http://echo.jsontest.com/key/value/one/two", method: .post).responseJSON { response in
json = response.result.value as? [String: String]
}
// SessionManager is also OK.
// SessionManager.default.request("http://echo.jsontest.com/key/value/one/two").responseJSON { _ in }
expect(json?["test"]).toEventually(equal("data"))
}
}
}
}
}
import UIKit
import Replacer
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
Replacer.replaceInstance(#selector(UIViewController.viewWillAppear(_:)),
of: UIViewController.self,
with: #selector(UIViewController.orig_viewWillAppear(_:)),
of: UIViewController.self)
return true
}
}
extension UIViewController {
func orig_viewWillAppear(_ animated: Bool) {
orig_viewWillAppear(animated)
print("swizzled")
}
}
github "tattn/Replacer"
pod 'Replacer'
git checkout -b my-new-feature
git commit -am 'Add some feature'
git push origin my-new-feature
Replacer 根据 MIT 许可证发布。详情请参阅 LICENSE 文件。