簡體   English   中英

有沒有辦法使用XCTest對Touch Id進行單元測試?

[英]Is there a way to unit test Touch Id using XCTest?

有沒有辦法使用XCTest對TouchId的“evaluatePolicy”或“canevaluatePolicy”進行單元測試? 我想用模擬器作為基礎進行單元測試。

謝謝

我已經描述了在這篇文章中為Touch ID代碼編寫單元測試的一種方法。

基本上,如果你有一個類似於這個的Touch ID管理類:

final public class TouchIDManager {

    /// Authentication context object we use for Touch ID. Typically it's just a `LAContext` instance that is mocked when testing.
    internal var authenticationContext = LAContext()

    /**
     Checks Touch ID availability.

     - returns: Flag indicating if Touch ID is available
     */
    public func touchIDAvailable() -> Bool {
        return authenticationContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: nil)
    }

    /**
     Authenticates the user with Touch ID

     - parameter completion: Completion handler
         */
    public func authenticate(completion: (success: Bool) -> ()) {
        guard touchIDAvailable() else {
            completion(false)
            return
        }
        authenticationContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Wanna Touch my ID?") {
            (success: Bool, error: NSError?) -> Void in
            completion(success: success)
        }
    }
}

您可以使用StubLAContext類偽造LAContext行為:

func testSuccessfulAuthentication() {
    /// A class faking Touch ID availability and successful user verification
    class StubLAContext: LAContext {
        override func evaluatePolicy(policy: LAPolicy, localizedReason: String, reply: (Bool, NSError?) -> Void) { reply(true, nil) }
        override func canEvaluatePolicy(policy: LAPolicy, error: NSErrorPointer) -> Bool { return true }
    }

    let manager = TouchIDManager()
    manager.authenticationContext = StubLAContext()

    manager.authenticate { (success) in
        XCTAssertTrue(success)
    }
}

顯然,這個特定的測試沒有多大作用,但它可能是測試應用程序中其他Touch ID相關邏輯的一個很好的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM