2015-07-20 42 views
12

Xcode 7†有一種直接測試用戶界面的新方法,包括新的測試目標「iOS UI Testing Bundle」(或「OS X」)。Xcode 7:應用程序測試和UI測試之間的鴻溝是不可橋接的嗎?

enter image description here

在UI測試的目標,似乎沒有內置的訪問模型或包括您的應用程序類。例如。 [UIApplication sharedApplication]不會從您的UI測試中調用。 這意味着「應用測試」和「UI測試」存在於可能無法跨越的鴻溝之中。

如前所述here

的問題是,Xcode的UI測試不允許進入實際應用。

問題:

  1. 可以這樣鴻溝彌合?如果是這樣,詳細地說,建立和鏈接器設置,並可能在github上工作xcodeproj
  2. 在Apple文檔中,可能會找到明顯的分歧。

†在寫作,測試軟件的時間。

回答

7

黑盒測試

UI測試是一個black-box testing框架。你不應該知道你正在測試的代碼的實現。

例如,您應該只關心標籤上的值更改,而不是控制器將正確的數據傳遞給視圖。您可以考慮用戶對您應用的視角的UI測試。她並不關心你的工作方式(甚至是否存在),那麼爲什麼要進行UI測試呢?

得到它的 「工作」

話雖這麼說,我理解你的無奈。如果你可以啓動一個視圖控制器,然後利用UI測試並做出斷言,那將是非常好的。但是,從Beta 5開始,這是不可能的。

有趣的是,您可以通過UI測試頂部的簡單@testable import ModuleName來創建應用對象的實例。請注意,您實際上無法通過類似.tap()的方法與其交互,因爲它是UI*類,而不是XCUI*

考慮將Donut作爲應用程序的模塊名稱。

import XCTest 
@testable import Donut 

class DonutUITests: XCTestCase { 
    let app = XCUIApplication() 

    override func setUp() { 
     continueAfterFailure = false 
     app.launch() 
    } 

    func testItemsViewController() { 
     let controller = ItemsViewController() 
     controller.addItemButton.tap() // <---- UIButton does not respond to tap()! 
    } 
} 
+1

比方說,你有一個應用程序的動態內容。您想要操作UI,然後驗證屏幕上不可見的內容。或者,也許您需要在決定調用哪個方法之前驗證指定的狀態,並且只通過在應用程序代碼中查詢Objective-C方法來了解該狀態。將兩種測試方法混合在一起很好,而不必自己製作每個視圖。 –

+1

除Teresa的評論外,您可能還想在執行UI測試之前將您的項目初始化爲特定狀態。 – gone

相關問題