Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swift Testing and Architecture

Swift Testing and Architecture

Danielle Tomlinson

September 11, 2015
Tweet

More Decks by Danielle Tomlinson

Other Decks in Programming

Transcript

  1. Testing
    @DanToml

    View Slide

  2. What?
    Test
    noun: A procedure intended to establish the quality,
    performance, or reliability of something, especially
    before it is taken into widespread use.

    View Slide

  3. Why?

    View Slide

  4. Tools

    View Slide

  5. XCTest
    // Contrived example test for a mythical add function
    func test_can_add_two_numbers() {
    // arrange
    let firstNumber = 1
    let secondNumber = 1
    let expectedResult = 2
    // act
    let ! = add(firstNumber, secondNumber)
    // assert
    XCTAssertEqual(!, expectedResult)
    }

    View Slide

  6. FBSnapshotTestCase
    // https://github.com/facebook/ios-snapshot-test-case
    func test_taylor_swift_view_displays_correct_image() {
    let viewModel = TaylorSwiftImageViewModel.testViewModel()
    let sut = TaylorSwiftImageView(viewModel: viewModel)
    FBSnapshotVerifyView(sut)
    }

    View Slide

  7. OHHTTPStubs
    OHHTTPStubs.stubRequestsPassingTest({$0.URL!.host == "mywebservice.com"}) { _ in
    // Stub it with our "wsresponse.json" stub file (which is in same bundle as self)
    let fixture = OHPathForFile("wsresponse.json", self.dynamicType)
    return OHHTTPStubsResponse(fileAtPath: fixture!,
    statusCode: 200, headers: ["Content-Type":"application/json"])
    }

    View Slide

  8. UI Testing

    View Slide

  9. Code Coverage

    View Slide

  10. Architecture

    View Slide

  11. Modal View Controller

    View Slide

  12. Massive View Controller

    View Slide

  13. Breaking it out

    View Slide

  14. MVVM
    Model-View-ViewModel

    View Slide

  15. Dependency Injection &
    Composability

    View Slide

  16. Clarity

    View Slide

  17. Use what works for you

    View Slide

  18. Lets talk about Testing

    View Slide

  19. Singletons

    View Slide

  20. View Models

    View Slide

  21. Views

    View Slide

  22. View Controllers

    View Slide

  23. Non-View Controllers

    View Slide

  24. Resources
    4 I'll be releasing a sample project on GitHub at some
    point in the next week or two.
    4 ObjC.io VIPER: http://bit.ly/1Ht1V6Y
    4 ObjC.io MVVM: http://bit.ly/1UNLXJf
    4 ObjC.io Lightweight View Controllers: http://bit.ly/
    1K1wAtw
    4 WWDC Session 229

    View Slide

  25. Questions?
    Find me on Twitter: @dantoml

    View Slide