2014-10-06 56 views
8

我想運行等待瀏覽器響應的測試。在XCTestCase中使用URL方案

測試目標有一個Info.plist,我可以在其中註冊自定義URL方案。但那些從來沒有被稱爲。我知道測試目標不是真正的應用程序。

有沒有辦法?

編輯(對於賞金):我想爲一個叫openUrl("tel://" + some phone number)的類寫一個集成測試。如何在XCTestCase中訂閱此URL方案?

+0

你能用NSURLProtocol實現你所需要的嗎? – 2015-04-23 03:12:33

+0

您可以通過'訂閱URL方案'來重新表達您的意思嗎?你的意思是,你如何確定分配哪個應用程序來處理特定的方案?或者你的意思是,你如何測試openURL是否實際執行操作? – 2015-04-23 18:27:47

+0

我的應用程序被註冊到這樣的URL方案:myapp://。我想測試是否可以在瀏覽器中打開http://mywebsite.com,最終將重定向到myapp://。 – McZonk 2015-04-24 07:51:06

回答

-1

我不確定你到底想要測試什麼。我認爲這不僅僅是URL是否可以打開。下面的測試用例檢查FaceTime是否會打開並可以打開一個URL。如果您正在測試的應用程序註冊了自定義方案,則只需更改pathToTestApplication即可使用。

enter image description here

class NSURL_SchemeTests: XCTestCase { 

    func testWhoHandlesSchemeTel() { 
     let testAppURL = NSURL(string: pathToTestApplication) 

     // create a NSURL for the test 
     let tel = "tel:5555555555" 
     let url = NSURL(string: tel) 
     XCTAssert(url != nil, "Could not create a URL from \(tel)") 

     // determine whether any application is registered to handle the URL 
     let workspace = NSWorkspace.sharedWorkspace() 
     let urlHandler = workspace.URLForApplicationToOpenURL(url!) 
     XCTAssert(urlHandler != nil, "No application found to open URL \(tel)") 

     // determine whether the expected test application is registered to handle the URL 
     XCTAssert(urlHandler! == testAppURL, 
      "Application \(pathToTestApplication) was not registered to handle URL \(tel)") 

     // attempt to open the URL 
     XCTAssert(workspace.openURL(url!), "Could not open URL \(tel)") 
    } 
} 
+0

我想測試我的應用程序是否已成功註冊到URL方案,並且在myapp://打開時是否獲得回調。 – McZonk 2015-04-28 14:24:40

+0

這個XCT代碼的一部分測試目標將確實測試您的應用程序是否已註冊以處理該方案。最後的測試也將決定它是否成功與應用程序通信。但是,如果您想查看應用程序實際從測試應用程序接收到的內容,則必須自行對應用程序進行測試。 – 2015-04-28 14:27:37

1

問題被重新標記到OS X,所以我的答案是不再有效

原來的答覆

這是不可能的。基本原因是測試連接到一個正在運行的應用程序實例,它們無法控制設備,它們作爲應用程序的一部分運行。您可能可以打開該URL,但無法返回到應用程序並執行斷言。

另請注意,XCUnit是單元測試框架。您將無法編寫高級集成測試。使用UI自動化可能會更成功,但即使是這樣,這個特定的測試案例也會非常複雜。例如,要通過模擬器中的應用程序打開鏈接,可以創建一個HTML頁面,該頁面將重定向到該鏈接,然後使用shell執行open testLink.html -a "iOS Simulator"。但是,我認爲這種測試是不可靠的,而且很難編寫和調試。

我的建議是:

  1. 寫一個單元測試嘲笑[UIApplication openURL:]並驗證您傳遞正確的URL給它。或者,如果您想要另一個方向,請編寫一個單元測試,以被調用的順序調用UIApplicationDelegate方法,模擬您的應用程序打開鏈接。這是迄今爲止您可以使用XCUnit。
  2. 手動測試其餘部分。
+0

我的問題是關於一個OS X.我從來沒有問過iOS。但我想你是對的。向URL方案註冊測試是不可能的。 – McZonk 2015-04-28 14:37:16

+0

@McZonk你已經標記了'cocoa-touch'。 – Sulthan 2015-04-28 14:41:22

+0

沒有忠誠的Tingley做過。不過,我認爲這個問題對於兩個平臺都是存在的。 – McZonk 2015-04-28 14:42:28