Test-Driven Development: By Example by Kent Beck deserves to be top of the list. Kent has rediscovered and popularized TDD, and his book is an invaluable learning guide and was a source of inspiration in how I structured Test-Driven Development in Swift.
Working Effectively with Legacy Code by Michael Feathers is one of the most influential books I read about software development. It looks at how to navigate legacy codebases, refactoring, and adding tests to them to progressively reclaim developer productivity—I’m prototyping a course on how to apply some of these lessons in Swift. Get in touch if you’d like to know more.
xUnit Test Patterns – Refactoring Test Code by Gerard Meszaros. If you read Test-Driven Development in Swift, you’ll recognize this book as I drew heavily from it, in particular for the Test Doubles theory.
Growing Object-Oriented Software Guided by Tests by Nat Pryce and Steve Freeman is one of the first testing books I read when learning about TDD. My biggest takeaway from it was the walking skeleton idea, that is, starting the development process with an app that works end-to-end, including continuous integration and automated deployment, even if the only thing it does is saying “Hello, world!”
Working Effectively with Unit Tests by Jay Fields. I loved Fields’ idea of solitary vs. sociable tests to better define a unit test’s scope. The book uses Java as the working language, so it might be a bit hard to follow, but it’s a great read to learn about the kind of refactoring you can make to keep a large test suite easy to work with.
iOS Unit Testing by Example by Jon Reid. Jon’s one of the most prominent teachers of good testing practices for Apple development. His book has lots of practical advice and a slightly different testing style than mine; I recommend it as an excellent complement to Test-Driven Development in Swift.
The Secret Skills of Productive Programmers by Itamar Turner-Trauring is a little-known gem. The book is not about testing or coding but focuses instead on the mindset and practices that will help you create more value as a software developer.
I already mentioned Jon Reid’s book but be sure to follow his blog Quality Coding, too.
Joe Masilotti published a lot of content on testing, and I found his work on UI testing particularly useful.
Avander Lee shared a best practices post I wholly endorse.
GeePaw Hill doesn’t write about iOS development but has valuable insight on TDD and software quality nonetheless. As an aside, I find that the best place where to look for resources to level up your coding skills is often outside the programming language you work with. Cross-pollination between languages, frameworks, and domains is the engine of innovation.
Swift itself is a prime example of this, borrowing concepts and patterns such as
Result from other programming languages. Checkout the book Range for and in-depth discussion on the value of cross-pollination.
Of course, I would be remiss if I didn’t mention my blog mokacoding.
I found Test & Code by Brian Okken to be the podcast that most consistently delivers quality conversations on testing. It mainly covers Python topics, but most of the principles transfer nicely to Swift, too.
I’ve been a guest.
The Bike Shed hosts Chris and Steph share stories and lessons learned every week. The show doesn’t focus on testing explicitly, but they are both very passionate about it, so the topic often comes up regularly.
Checkout this episode for example.
Similarly, Rails with Jason by Jason Swett covers doesn’t cover testing explicitly, but the topic often comes up. I love how Jason interviews guests, relentlessly asking questions to dig deep on each topic.