gpt4 book ai didi

ios - 如何对iOS应用程序代表方法的调用进行单元测试?

转载 作者:行者123 更新时间:2023-12-01 19:57:32 26 4
gpt4 key购买 nike

我有一个与GitHub API集成的iOS应用程序。我正在对OAuth请求进行单元测试,这需要测试来自GitHub API的代码的接收,该代码将用于交换 token 。

AppDelegate.swift中,我具有以下方法,该方法用于在用户授权我的应用程序使用其GitHub帐户时处理来自GitHub的回调:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}

步骤如下:
  • 打开应用程序。
  • 使用URL来授权GitHub帐户访问权限(https://github.com/login/oauth/authorize),显示SFSafariViewController的实例,允许用户按下“授权”按钮。
  • GitHub使用我在GitHub中注册应用程序时提供的应用程序回调URL,它会发送通知以打开我的应用程序。
  • 执行上面的方法,在这里我从code检索url参数。

  • 但是,我一直试图寻找一种方法来测试它,而无需实际向GitHub API发出请求。我可以创建一个 URL实例,以模仿GitHub为我的应用程序提供的内容,但是我想在没有实际请求的情况下对其进行测试。

    有没有一种方法可以对此进行单元测试,或者这是我不应该担心的事情,因为它由操作系统处理,而是仅测试我的代码以解析测试 codeURL参数?

    更新

    使用Jon的 advice之后,我创建了一个测试类,以允许我模拟实际的GitHub回调:

    class GitHubAuthorizationCallbackTests: XCTestCase {

    let delegate = AppDelegateMock()

    func test_AuthorizationCallbackFromGitHub_ApplicationOpensURL() {
    guard let url = URL(string: "xxxxxxxxxxxxxx://?code=********************") else { return XCTFail("Could not construct URL") }
    let isURLOpened = delegate.application(UIApplication.shared, open: url)
    XCTAssertTrue(isURLOpened, "URL is not opened from GitHub authorization callback. Expected URL to be opened from GitHub authorization callback.")
    }

    }

    然后,我创建了 AppDelegateMock.swift而不是 AppDelegate.swift,添加了执行GitHub回调打开我的应用程序时要调用的预期方法:

    import UIKit

    class AppDelegateMock: NSObject, UIApplicationDelegate {

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    return true
    }

    }

    测试通过,使我能够测试处理从GitHub返回的 code参数和方法的 url参数所需的逻辑。

    最佳答案

    因为您要测试回调,所以…让测试直接调用该回调,就像GitHub框架调用了它一样。

    围绕幸福的道路编写简单的测试。然后,由于您无法控制外部数据,因此编写测试(如果Swift允许)使用奇怪的options调用回调的测试。

    关于ios - 如何对iOS应用程序代表方法的调用进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667280/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com