Xcode 7: is chasm between app tests and UI tests unbridgeable?

后端 未结 1 1486
故里飘歌
故里飘歌 2020-12-29 10:32

Xcode 7† has a new way to test your UI directly, including a new testing target \"iOS UI Testing Bundle\" (or \"OS X\").

相关标签:
1条回答
  • 2020-12-29 11:03

    Black-box Testing

    UI Testing is a black-box testing framework. You shouldn't have to know anything about the implementation of the code you are testing.

    For example, you should only care that the value on a label changes, not that the controller passed the right data to the view. You can think of UI Testing from the user of your app's perspective. She doesn't care how your ItemsViewController works (or even that it exists), so why should the UI Tests?

    Getting it to "Work"

    That being said, I understand your frustration. It would be great if you could spin up a view controller and then tap around with UI Testing and making assertions. However, as of Beta 5 this is not possible.

    What's interesting is that you can, however, create instances of your app's objects with a simple @testable import ModuleName at the top of your UI Tests. Note that you can't actually interact with it via the .tap()-like methods, as it's a UI* class, not a XCUI* one.

    Consider Donut to be the application's module name.

    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()!
        }
    }
    
    0 讨论(0)
提交回复
热议问题