ios unit testing like a boss
DESCRIPTION
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.TRANSCRIPT
iOS Unit Testing Like a Boss
Matt Darnall, Salesforce@mdarnall
Safe harborSafe 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.
Who Is this Guy?
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 ThompsonNSHipster.com
“.. 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 SolanoNocilla Project
Testing doesn’t have to be an afterthought
Stand On TheShoulders Of
Giants
Use tools that support developer efficiency
and happiness
My Testing Tools
✓ Specta / Expecta
✓ OCMock✓ OHHTTPStubs✓ AppCode ✓ XCTool
Specta ✓ Fluent style similar to RSpec, Mocha, etc.
✓ Lightweight and easy to setup
✓ Asynchronous Testing
Expecta ✓ Similar to RSpec Matchers
✓ Easy to read✓ Framework
agnostic✓ Supports
custom matchers
OCMock
✓ Stubs✓ Mocks✓ Partial Mocks✓ Protocol
Mocks
AppCode
✓ Refactorings✓ Code analysis✓ Better
navigation of projects
XCTool ✓ Tool for builds and tests at the command line
✓ Better support for Continuous Integration
Find the tools thathelp you
be productive and efficient
The Magic Tricks of TestingSandi Metz
Programmer, Author, Speaker
Good Tests Are
✓ Thorou
gh
✓ Stable
✓ Fast
✓ Few
Focus on messages
Object Under Test OutgoingIncoming
Sent To Self
Message TypesQueries: Return something, change
nothing
Commands: Return nothing, change
something
Rule #1Test incoming query messages
by making assertions about what they send back
Rule #2Test incoming command
messagesby making assertions
about direct public side effects
Rule #3Do not test private methods
Do not make assertions about their result
Do not expect to send them
Rule #4Do not test outgoing query messagesDo not make assertions about their
resultDo not expect to send them
Rule #5Expect to send
outgoing command messages
GitHub Trending Repositories
Magic Tricks Applied to iOS
Incoming Query Message
make assertions about what is sent back
UITableViewDataSource
cellForRowAtIndexPath:
Incoming Queries
numberOfRowsInSection:
Incoming Command Message
make assertions about direct public side
effects
ViewControllerview
Incoming Command
Testing Outlets & Actions1 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.
Incoming Command & Outgoing Query
viewWillAppearViewController
getTrendingRepositoriesGithubSearchClient
Outgoing Query
Incoming Query
Do not test outgoing query messagesDo not make assertions about their result
Do not expect to send them
Incoming Command
Stub the outgoing query message
ViewControllergetTrendingRepositories
Test Double
Stubs provide “canned” answers to calls made during the test
Outgoing Query
Dependency Injection
ViewController
✓ Pass dependencies to initializer (aka Constructor
Injection)
✓ Set dependencies with properties (aka Setter
injection)
initWithSearchClient
Outgoing Commands
Model postNotification NSNotificationCenter
Expect to send
outgoing command
messages
Outgoing Command
Outgoing Commands
ViewController addObserver NSNotificationCenter
Expect to send
outgoing command
messages
Outgoing Command
More!✓ Follow on Chatter
✓ http://http://bit.lyhttp://bit.ly/http:
//bit.ly/HvRbZQ
✓ http://http://mdarnall.com
✓ Get Involved!
Thanks!✓ Sandi Metz
✓ The maintainers of these
awesome projects
Matt Darnall@mdarnall
mdarnall.com