Getting “Test”-y Test-driven Development & Automated Deployment for iOS Saturday, July 16, 2011
Getting “Test”-yTest-driven Development & Automated Deployment for
iOS
Saturday, July 16, 2011
Your Humble Speakers
• Jonah Williams - @Zalambar
• Rudy Jahchan - @rudy
Saturday, July 16, 2011
How do we test?
Saturday, July 16, 2011
How do we test?
SenTestingKit
GTM
Cedar
KiwiKIF
GHUnit
OCMock
OCHamcrest
Frank
iCuke
Saturday, July 16, 2011
Why do we test?
Saturday, July 16, 2011
Why do we test?
To make sure our code works(duh!)
Saturday, July 16, 2011
Why do we test FIRST?
Saturday, July 16, 2011
Why do we test FIRST?
To design our code.
Saturday, July 16, 2011
Why do we test FIRST?
To design our code.(duh!)
Saturday, July 16, 2011
Why do we test FIRST?
Saturday, July 16, 2011
Test Structure
Saturday, July 16, 2011
Test Structure
GIVEN
Saturday, July 16, 2011
Test Structure
GIVEN
WHEN
Saturday, July 16, 2011
Test Structure
GIVEN
WHEN
THEN
Saturday, July 16, 2011
Test Structure
GIVEN
WHEN
THEN
certain conditions
Saturday, July 16, 2011
Test Structure
GIVEN
WHEN
THEN
certain conditions
something happens
Saturday, July 16, 2011
Test Structure
GIVEN
WHEN
THEN
certain conditions
something happens
the conditions change (or don’t)
Saturday, July 16, 2011
Unit Testing
Saturday, July 16, 2011
Unit Testing
Saturday, July 16, 2011
Sample Class
Saturday, July 16, 2011
xUnit Style
Saturday, July 16, 2011
SenTestingKit
Saturday, July 16, 2011
OCHamcresthttp://bit.ly/ochamcrest
Saturday, July 16, 2011
Stubbing & Mocking
Saturday, July 16, 2011
GHUnithttp://gabriel.github.com/gh-unit/
Saturday, July 16, 2011
BDD
Saturday, July 16, 2011
BDD
Behavior Driven Design
Saturday, July 16, 2011
RSpec
http://github.com/rspec/rspec
Saturday, July 16, 2011
RSpec Book
Saturday, July 16, 2011
Cedar
http://github.com/pivotal/cedar
Saturday, July 16, 2011
Kiwi
http://kiwi-lib.info/
Saturday, July 16, 2011
Integration Tests
Saturday, July 16, 2011
iCuke
http://github.com/unboxed/icuke
Saturday, July 16, 2011
iCuke
http://github.com/unboxed/icuke
Saturday, July 16, 2011
Frank
http://github.com/moredip/Frank
Saturday, July 16, 2011
KIFhttp://github.com/square/KIF
Saturday, July 16, 2011
KIF
http://github.com/square/KIF
KeepItFunctional
Saturday, July 16, 2011
KIF
http://github.com/square/KIF
Saturday, July 16, 2011
Continuous Integration
Saturday, July 16, 2011
Command-Line Builds
Saturday, July 16, 2011
Command-Line Execution
Saturday, July 16, 2011
Bash
http://gist.github.com/949831
➜ ~ ./build.sh...**** Describe WorkspaceAvailable schemesInformation about workspace "My_App": Schemes: Ad Hoc Development**** Set EnvironmentMy_App/My_App/staging-Info.plist -> ~/TeamCity/build-agent-1/work/My_App_staging/My_App/My_App/My_App-Info.plistMy_App/My_App/staging.plist -> My_App/My_App/environment.plistEnvironment set to com.MyCompany.My_App.staging at version 1.0**** Increment Bundle VersionSetting version of project My_App to: 24....**** BuildRunning xcodebuild > xcodebuild_output ......Retrieving build products......**** Package ApplicationCodesign as "iPhone Distribution: MyCompany, LLC", embedding provisioning profile ~/TeamCity/build-agent-1/work/My_App_staging/ad_hoc/My_App_Staging_Ad_Hoc.mobileprovision**** Verify...**** Prepare OTA DistributionGenerating com.MyCompany.My_App.staging.app.plist**** Complete!
Saturday, July 16, 2011
Rake
http://gist.github.com/1017153
Saturday, July 16, 2011
Over The Air Distribution
Saturday, July 16, 2011
OTA: Roll Your Own<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>items</key> <array> <dict> <key>assets</key> <array> <dict> <key>kind</key><string>software-package</string> <key>url</key><string>$artifacts_url/$project_app.ipa</string> </dict> <dict> <key>kind</key><string>full-size-image</string> <key>needs-shine</key><true/> <key>url</key><string>$artifacts_url/$full_size_image_name</string> </dict> <dict> <key>kind</key><string>display-image</string> <key>needs-shine</key><true/> <key>url</key><string>$artifacts_url/$display_image_name</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>$bundle_identifier</string> <key>bundle-version</key><string>$short_version_string $build_number</string> <key>kind</key><string>software</string> <key>subtitle</key><string>$environment_name</string> <key>title</key><string>$project_app</string> </dict> </dict> </array></dict></plist>
itms-services://?action=download-manifest&url=http://host.example/project_name.acceptance.app.plist
Saturday, July 16, 2011
OTA: TestFlight
http://testflightapp.com/
Saturday, July 16, 2011
What’s Missing?
Saturday, July 16, 2011
Factories
Saturday, July 16, 2011
Factories
Saturday, July 16, 2011
Fixtures
Saturday, July 16, 2011
CoreData Migrations
Saturday, July 16, 2011
Auto-testingguard integration
https://github.com/guard/guard
Saturday, July 16, 2011