Practical iOS Unit Testing with John Sundell training

This course is taught 100% remote

Last updated on January 31, 2023, 04:04pm

Join John Sundell, creator of Swift by Sundell, for a full-day workshop all about unit testing iOS apps.

Learn the fundamentals of Apple’s unit testing framework, XCTest, as well as numerous practical techniques for refactoring code to become testable, organizing test suites, making tests robust and easy to maintain, asynchronous testing, and much more.

The goal of this workshop is to prepare you for using unit testing during your daily work of building production apps for iOS. It’s primarily designed for developers with little to no experience with unit testing and XCTest, and will cover both basic and advanced techniques.

Note that this workshop won’t attempt to convince you to start using “Test-Driven Development,” or to completely change the way you work. Instead, it’ll be 100% focused on giving you practical advice on how you can start leveraging unit testing as a tool within both new and existing projects.

If you enjoy the Swift by Sundell website, podcast and videos — then you’ll love this hands-on workshop!

This training is organized by Swift Paris Trainings (aka Greg Lhotellier) in partnership with Delicious Insights.

  • World-renowned expert trainer
  • Multiple hands-on projects
  • State-of-the-art tech
  • Latest best practices


The Practical iOS Unit Testing with John Sundell workshop empowers trainees to:

  • create unit tests based on Apple's XCTest framework;
  • write comprehensive, robust unit test suites, focused on iOS-specific use cases;
  • make their code easy to test and refactor legacy code to fulfill that goal;
  • use various dependency injection techniques to set up predictable test environments;
  • understand and leverage the behavior of mocks and stubs, and spot where these techniques can be usefully applied when writing tests;
  • use async/await to test async code;
  • apply these techniques to unit test their apps' user interface.

Intended audience

The training takes place entirely in English, so a sufficient spoken understanding of English is mandatory.

Trainees must also have at least a few years of experience in developing iOS apps with Swift and SwiftUI or UIKit, and basic proficiency with Git and command-line tools. We emphasize that this training is not intended for beginners, but targeted at people with prior professional experience of app development with Swift on iOS.

Unless otherwise specified, predefined-dates, multi-client sessions are held in French, so attendees should be reasonably fluent. You are naturally welcome to book custom dates for your company using the link above.

Not sure you’re a good fit?

Let’s check together (FR)


There is no pre-requisite for this training course (as in, verifiably acquired knowledge, through degrees, certifications, tests, etc.).


  1. The iOS unit testing landscape

    • Introduction to XCTest, Apple's built-in unit testing framework
    • Goals of writing unit tests
    • How unit tests, integration tests and UI tests work together
  2. Test scenarios and individual tests

    • Lifecycle of a test scenario
    • Défining individual unit tests within a test scenario
    • Best practices for easy-to-test code
    • Refactoring existing code to make it easy to test
  3. Isolating unit tests

    • Dependency injection, mocking and stubbing
    • Providing test data
    • Mocking network calls
  4. Test-writing best practices

    • Testing assertions
    • Making test failures easy to diagnose
    • Verifying edge cases, bug fixes and error-handling code
  5. Async testing

    • Using async/await to unit-test async code
    • Using other concurrency mechanisms
  6. Testing our user interface

    • Coupling issues to view and view controllers
    • Testing our user interface in isolation of these

Un p'tit document ?

Imprimer ou télécharger en PDF le programme et les infos


  • Every session is held synchronously, “live,” including remote sessions. This is not about pre-recorded videos.
  • We are currently not scheduling new multi-client in-room sessions.
  • Comprehensive course material is provided, acting as a common thread. It usually includes numerous slides and starter codebases or repositories for every exercise and lab.
  • Trainees can ask questions at any time.
  • Sessions always alternate between theory and hands-on labs, in short intervals (5 minutes to 1 hour).
  • Hands-on periods rely on real-world use-cases (which can be bootstrapped through starter codebases, Git repositories or online assignment labs).
  • Hands-on periods may be completed individually or as sub-groups that may vary from one period to the next, to foster pair programming and collaboration.
  • Remote sessions use a Zoom recurring meeting, accessible through a provided link using both the installed app and the pure-web, no-install client. They mostly use features such as video thumbnails, screensharing, chat, breakout rooms and possibly quizzes, annotations and whiteboards.
  • Sessions run 7 hours on a single day
  • The schedule runs from 9:30 to 12:30 and 14:00 to 18:00.
  • For custom dates booked specifically by your company, the schedule can be adjusted to better suit your needs. In particular, we can use half-days locked on reasonable hours in your timezone, e.g. 9a-12:30p EST or 8a-11:30a PST.
  • Every trainee uses their own laptop or workstation.
  • The laptop used by the trainee must be a Macbook capable of running Apple's developer tools with reasonable performance, and have the latest non-beta Xcode installed.
  • Training sessions range from 5 to 10 trainees.

Deliverables & assessments

  • Every session half-day requires attendance signing (paper sheet or digital tool). For remote sessions, should a trainee fail to submit their entire attendance sheet in due time, Zoom participant logs will be considered authoritative.
  • At the beginning of every day's first period, we run a “debrief”: during about half an hour, we help collectively resurface skills and knowledge first tackled on the previous day. This helps put everyone back “in the zone,”, consolidate learning and boost group dynamics.
  • Throughout the course, assessment of skill acquisition is done through the successful completion of hands-on labs (exercises, mini-projects, labs, use cases, etc.). Interactive quizzes may supplement this. The trainer remains available for any question during hands-on periods.
  • Should a trainee exhibit significant difficulty, the trainer may opt to provide one-to-one mentoring for a while using the trainee's computer as a working base. This also applies to remote sessions using Zoom's dedicated features (e.g. one-to-one / individual assistance).
  • When the session ends, every trainee may request a completion certificate (or at least attendance certificate) and, for remote sessions financed by a French institutional entity, we issue a standardized completion certificate in order for financing to be able to proceed smoothly.
  • Once the training is over, every trainee receives a link to an online “hot” feedback survey, so they can express, among other things, whether they feel they achieved the stated goals of the training (or believe these will be achieved in the short term).

During the session, trainees receive at the start of every period access to:

  • all the related slides and supporting material in a web-based format, so they can easily follow along.

Once the training is done, they also get:

  • an extremely content-rich debrief e-mail,
  • a reference archive with finalized codebases, all related slides and various complementary resources.

Acquired skills are assessed throughout the session, by looking at the success rate for interactive exercises.


John Sundell

John Sundell

John Sundell is the creator of Swift by Sundell. During the past three years, he’s helped over a million developers level up their skills through over 500 freely available articles and podcast episodes, and by speaking at top tech conferences around the world.

With over a decade of professional software development experience, working for companies like Volvo and Spotify — he’s now working with several teams of various sizes, to help them improve their skills, their code, and the products that they ship.

His goal is always to help the Swift and iOS developer communities as much as he can, to share his experiences working on all sorts of apps and software products, and to help others get more out of their work as software developers.

Next sessions

    (Unless otherwise stated, every session has 4+ seats still available, and is in French; you can naturally book custom dates for your company using the link further below.)


    You registerPer trainee
    1 to 2 trainees€1,000 net
    3 to 4 trainees€850 net
    5+ trainees€700 net

    (Any ongoing discount or special offer is not reflected here, but will be automatically applied in the registration form.)

    Need an in-house / custom training?

    For a bespoke training, tailored to your needs, either at your office, some other place or remotely, please describe your context and needs using the following link.

    Request my in-house / custom training

    Hardware & software requirements

    • Use a computer of sufficient performance (and provide it for single-client, in-room sessions, so ideally a laptop)
    • Remote sessions: this computer must feature a webcam, mic and audio output.
    • Remote sessions: use an internet connection with sufficient bandwidth (1Mbps+, ideally 5Mbps+), both incoming and outgoing.
    • Remote sessions: be able to run Zoom, either as a desktop install or as the pure-web client. You can test the installed software's configuration here.

    Trainees must bring a Macbook capable of running Apple's developer tools with reasonable performance, and have the latest non-beta Xcode installed.

    Registration & deadlines

    Regardless of the modalities you're looking for (single- or multi-client, in-room or remote), your initial request (for quotation or contract) should be made online from the training’s web page. You can find further up contract request links for every available multi-client session, a proposal request button for a single-client session, and for any other enquiry can use the contact button further below. Please favor our online forms as they speed up processing by avoiding numerous e-mail back-and-forths in order for us to get all your necessary information.

    For multi-client, fixed-date sessions, we reply to quotation or contract requests within at most 2 business days (and usually within minutes). For single-client, custom sessions, we usually get back to you within 3 business days to fine-tune your requirements and create a bespoke offer.

    The e-mails we send to provide quotations or contracts, as well as our online training pages, provide a link to an online survey prospective trainees can use for fit-for-needs assessment; this information should get to us ASAP, ideally before contract signing, so we can verify our training offer is a good match for the audience.

    Summons are sent by e-mail no later than 7 days prior to the session, at which time a potential cancellation decision (usually because two few trainees registered) is made. If the session is guaranteed ahead of that deadline, we can send your summons earlier at your request.

    For multi-client sessions, you can register online (requesting a contract and sending it back signed by e-mail) until the day before the session starts, provided the required amount of seats remain free. If you finalize your registration after the usual summons-sending deadline, your summons are sent immediately by e-mail.

    However, when French nationals contractualize with us in their personal capacity, French law mandates a withdrawal period (10 calendar days for in-room sessions, 14 calendar days for online sessions). In order to allow such clients to register later than this, they are provided an opt-in choice in their contract request online form to waive their withdrawal rights if the schedule requires it.

    For French client entities applying for third-party financing (e.g. OPCOs, Pôle Emploi, Regions, EU), it is imperative that financing agreements be sent to Delicious Insights no later than the last day of the training session. Should financing be denied or only partially provisioned, the client is liable for payment of the balance of the fee.

    You can find more information on the details of registration, cancelling and getting refunds in our Terms of Sale.

    Disabilities & special needs

    The French law dated September 5, 2018 for “freedom to choose one’s professional future” aims to facilitate accessing and retaining a job for people with disabilities or special needs.

    Delicious Insights is very keen to help everyone, regardless of their particulars, move forward professionally.

    We can often adapt the modalities of our trainings to fit your needs: let's just review your situation together.

    Do feel free to get in touch with our point person for Disabilities, Christophe Porteneuve, by e-mail or phone.

    Do feel free to get in touch with our point person for Disabilities, Christophe Porteneuve, by e-mail at or phone at +33 662 059 656.

    A question, a concern?

    Don’t fret, we’re sure to have answers to help put your mind at ease and get a clearer picture. So let’s talk!

    Get in touch

    Get in touch by e-mail at or call us at +33 662 059 656.