簡體   English   中英

使用登錄系統進行Xcode UI測試

[英]Xcode UI tests with login system

我有一個帶登錄系統的應用程序,所以一旦用戶登錄了應用程序,我將他們的會話存儲在本地數據庫中,這會阻止用戶每次使用該應用程序時都登錄。 顯然,如果用戶尚未登錄,則應用程序會顯示LoginViewController ,但如果應用程序檢測到用戶的當前會話,則會顯示HomeViewController

我已經為我的HomeViewController創建了一些測試,它們都運行良好。 但是,我已經意識到它們工作正常,因為應用程序當前存儲了會話。 如果我進入應用程序並注銷當前用戶,當我運行UI測試時,它們將失敗。 這是有道理的,因為測試需要顯示HomeViewController ,而是顯示LoginViewController

考慮到我還想為LoginViewController創建UI測試,創建一個解決方案似乎是合理的,在每個測試中,如果用戶是否登錄,我會設置。 我怎么能這樣做?

經過一番研究,在XCUIApplication發現參數/環境中找到答案。 這允許您在執行稍后可由主代碼解釋的測試時發送某些配置。

為了我的工作,我放置了以下代碼:

// UI Test
func testWelcomeIsShown() {
   let app = XCUIApplication()
   app.launchArguments.append("isUITestingLogin")
   app.launch()
   // Rest of your test steps
}

// AppDelegate or wherever you fetch your current session
func getCurrentSession() {
    if NSProcessInfo.processInfo().arguments.contains("isUITestingLogin") {
        session = nil
    } else {
        session = DatabaseManager.getSession()
    }
}

注意:此代碼適用於記錄和執行測試。 但是,如果您使用相同的邏輯進行多個測試,則可能testWelcomeIsShown()的前3行移動到測試類的setUp() 但是,請務必記住,在記錄測試時不會執行此設置,因此您需要手動設置無當前會話環境。

您也可以使用SBTUITestTunnel ,它允許您將測試目標中的文件上傳到應用程序的沙箱。 應該足夠准備一個帶有預填充登錄信息的數據庫,然后在啟動時將其發送到應用程序的目標。

該庫的美妙之處在於應用程序的代碼不會受到測試代碼的污染。

暫無
暫無

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

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