iOS Unit Testing Like a Boss
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

iOS Unit Testing Like a Boss

on

  • 333 views

Make testing easier and more productive by applying test-driven development strategies to the world of iOS and Objective-C. Join us to learn about the tools that are available, and hear strategies for ...

Make testing easier and more productive by applying test-driven development strategies to the world of iOS and Objective-C. Join us to learn about the tools that are available, and hear strategies for writing more testable code and robust tests. You'll be ready to take the next step and integrate these strategies into your daily workflow.

Statistics

Views

Total Views
333
Views on SlideShare
333
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

iOS Unit Testing Like a Boss Presentation Transcript

  • 1. iOS Unit Testing Like a Boss Matt Darnall, Salesforce @mdarnall
  • 2. Safe harbor Safe harbor statement under the Private Securities Litigation Reform Act of 1995: This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services. The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site. Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.
  • 3. Who Is this Guy?
  • 4. Objective-C developers have, for the most part, remained relatively apathetic to Unit Testing ("There's that SenTest thing, but who uses that, really?"). -Matt Thompson NSHipster.com
  • 5. “.. I don't think we have a problem with tools. We have a cultural problem that we need to fix, and that's something only we (you and me) can do something about. Go and spread the word” -Luis Solano Nocilla Project
  • 6. Testing doesn’t have to be an afterthought
  • 7. Stand On The Shoulders Of Giants
  • 8. Use tools that support developer efficiency and happiness
  • 9. My Testing Tools ✓ Specta / Expecta ✓ OCMock ✓ OHHTTPStubs ✓ AppCode ✓ XCTool
  • 10. Specta ✓ Fluent style similar to RSpec, Mocha, etc. ✓ Lightweight and easy to setup ✓ Asynchronous Testing
  • 11. Expecta ✓ Similar to RSpec Matchers ✓ Easy to read ✓ Framework agnostic
  • 12. OCMoc k ✓ ✓ ✓ ✓ Stubs Mocks Partial Mocks Protocol Mocks
  • 13. AppCod e ✓ Refactorings ✓ Code analysis ✓ Better navigation of projects
  • 14. XCTool ✓ Tool for builds and tests at the command line ✓ Better support for Continuous Integration
  • 15. Find the tools that help you be productive and efficient
  • 16. The Magic Tricks of Testing Sandi Metz Programmer, Author, Speaker
  • 17. Good Tests Are ✓ Thorou gh ✓ Stable ✓ Fast
  • 18. Focus on messages Incoming Object Under Test Sent To Self Outgoing
  • 19. Message Types Queries: Return something, change nothing Commands: Return nothing, change something
  • 20. Rule #1 Test incoming query messages by making assertions about what they send back
  • 21. Rule #2 Test incoming command messages by making assertions about direct public side effects
  • 22. Rule #3 Do not test private methods Do not make assertions about their result Do not expect to send them
  • 23. Rule #4 Do not test outgoing query messages Do not make assertions about their result Do not expect to send them
  • 24. Rule #5 Expect to send outgoing command messages
  • 25. GitHub Trending Repositories
  • 26. Magic Tricks Applied to iOS
  • 27. Incoming Query Message numberOfRowsInSection: UITableViewDataSource cellForRowAtIndexPath: Incoming Queries make assertions about what is sent back
  • 28. Incoming Command Message ViewController view Incoming Command make assertions about direct public side effects
  • 29. Testing Outlets & 1 Actions Test that outlets exist 2 Test that outlets contain actions back to methods on the controller 3 Send the action command to the ViewController and assert any public side effects.
  • 30. Incoming Command & Outgoing Query viewWillAppear Incoming Command ViewController GithubSearchClient getTrendingRepositories Outgoing Query Incoming Query Do not test outgoing query messages Do not make assertions about their result Do not expect to send them
  • 31. Stub the outgoing query message ViewController getTrendingRepositories Test Double Outgoing Query Stubs provide “canned” answers to calls made during the test
  • 32. Dependency Injection initWithSearchClient ViewController ✓ Pass dependencies to initializer (aka Constructor Injection) ✓ Set dependencies with properties (aka Setter injection)
  • 33. Outgoing Commands Model postNotification Outgoing Command Expect to send outgoing command messages NSNotificationCenter
  • 34. Outgoing Commands ViewController addObserver Outgoing Command Expect to send outgoing command messages NSNotificationCenter
  • 35. More! ✓ Follow on Chatter ✓ http://http://bit.lyhttp://bit.ly/http: //bit.ly/HvRbZQ ✓ http://http://mdarnall.com ✓ Get Involved!
  • 36. ✓ Thanks! Sandi Metz ✓ The maintainers of these awesome projects
  • 37. Matt Darnall @mdarnall mdarnall.com