GitHub API와 통합되는 iOS 애플리케이션이 있습니다. 내가 OAuth
요청을 단위 테스트하고 있는데 토큰 교환에 사용할 GitHub API의 코드 수신을 테스트해야합니다. 내 AppDelegate.swift
에서iOS 애플리케이션 위임 방법의 유닛 테스트 호출을 어떻게 할 수 있습니까?
, 나는 사용자가 자신의 GitHub의 계정을 사용하는 내 응용 프로그램에 권한을 부여 할 때 GitHub의에서 콜백을 처리하는 데 사용되는 다음과 같은 방법 한 다음과 같이
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}
단계는 다음과 같습니다
- 응용 프로그램을 엽니 다.
- GitHub 계정 액세스 권한을 부여하기위한 URL (https://github.com/login/oauth/authorize)을 사용하면
SFSafariViewController
의 인스턴스가 표시되어 사용자가 '인증'버튼을 누를 수 있습니다. - GitHub는 내 애플리케이션을 등록하라는 알림을 보내는 GitHub에 내 애플리케이션을 등록 할 때 제공 한 애플리케이션에 콜백 URL을 사용합니다.
- 매개 변수를
url
에서 검색하는 위의 방법이 실행됩니다.
그러나 실제로 GitHub API에 요청하지 않고이를 테스트하는 방법을 찾으려고합니다. GitHub이 내 응용 프로그램을 제공하는 것을 모방 한 URL
인스턴스를 만들 수 있지만 실제 요청을하지 않고이 인스턴스를 테스트하고 싶습니다.
단위 테스트 방법이 있습니까? 아니면 OS에서 처리했기 때문에 걱정할 필요가없는 코드입니다. 테스트 매개 변수를 구문 분석하기 위해서만 코드를 테스트하십시오. URL
? 사용하는 대신 AppDelegate.swift
할, 내가 AppDelegateMock.swift
을 만든 다음
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.")
}
}
:
UPDATE
복용 후 존의 advice, 나는 내 행동에 GitHub의 콜백을 시뮬레이션 할 수 있도록 테스트 클래스를 생성 GitHub 콜백을 실행하여 내 앱을 열 때 호출 할 의도 된 메소드에 추가 :
import UIKit
class AppDelegateMock: NSObject, UIApplicationDelegate {
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}
}
테스트가 통과하여 GitHub int url
메서드의 매개 변수에서 반환 된 code
매개 변수를 처리하기 위해 테스트해야하는 논리를 테스트 할 수 있습니다.