2017-01-15 1 views
1

GitHub API와 통합되는 iOS 애플리케이션이 있습니다. 내가 OAuth 요청을 단위 테스트하고 있는데 토큰 교환에 사용할 GitHub API의 코드 수신을 테스트해야합니다. 내 AppDelegate.swift에서iOS 애플리케이션 위임 방법의 유닛 테스트 호출을 어떻게 할 수 있습니까?

, 나는 사용자가 자신의 GitHub의 계정을 사용하는 내 응용 프로그램에 권한을 부여 할 때 GitHub의에서 콜백을 처리하는 데 사용되는 다음과 같은 방법 한 다음과 같이

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

단계는 다음과 같습니다

  1. 응용 프로그램을 엽니 다.
  2. GitHub 계정 액세스 권한을 부여하기위한 URL (https://github.com/login/oauth/authorize)을 사용하면 SFSafariViewController의 인스턴스가 표시되어 사용자가 '인증'버튼을 누를 수 있습니다.
  3. GitHub는 내 애플리케이션을 등록하라는 알림을 보내는 GitHub에 내 애플리케이션을 등록 할 때 제공 한 애플리케이션에 콜백 URL을 사용합니다.
  4. 매개 변수를 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 매개 변수를 처리하기 위해 테스트해야하는 논리를 테스트 할 수 있습니다.

답변

2

콜백을 테스트하기 위해 테스트에서 콜백을 직접 호출하면 이 마치 인 것처럼 GitHub 프레임 워크가 호출합니다.

행복한 경로를 중심으로 간단한 테스트를 작성하십시오. 그런 다음 제어 할 수없는 외부 데이터를 처리하기 때문에 Swift가 허용하는 경우 이상한 options으로 콜백을 호출하는 테스트를 작성하십시오.

관련 문제