How to Use Dependency Injection to Make Your Code Testable


If we’ve learned the Three Steps of TDD and the Three Laws of TDD, what keeps us from doing Test Driven Development? Maybe it’s not knowing how to write unit tests. Or more specifically, not knowing how to write unit tests against “real” code.

And what keeps us from writing unit tests against our own code? I bet it’s not knowing what our many options are.

Dependency Injection can unlock your code.

Ball and chain: Unlock Your Code with Dependency Injection

Birth of a presentation

That was the thought process I had when I was first asked to speak at a technical conference.

My talk Test Driven Development for iOS (and anything) …by Controlling Dependencies at MCE 2014 in Warsaw could have crashed and burned:

  • It had an awkward title.
  • It wasn’t really about TDD.
  • I’d never spoken at a conference.
  • I uttered many ums and ahs, and touched my mouth nervously.

But it was rated “Best Talk at MCE”!

Watch “Controlling Dependencies”

Here’s a rough outline:

  • 3 Types of Unit Tests
  • How Interaction Tests Work
  • 4 Types of Dependency Injection
  • Example: Writing Tests for Networking Calls (using a hand-rolled mock)
  • Refactoring Test Code for Readability

When have an hour, pour yourself a drink and watch. Or take it in sections. The talk itself is 42 minutes, followed by Q&A.

Here are the books on my last slide.

In addition to the video, I’m making my slides available as a bonus. You can access the bonus PDF here.

Access Bonus PDF

What successes have you had applying Dependency Injection to your code? Did it help you test something that used to resist testing? Did it help in other ways? Share your story in the comments below.

About the Author Jon Reid

Jon is a consultant on Clean Code for iOS, focusing on Test Driven Development, unit testing, refactoring, and design. He’s been practicing TDD since 2001. You can learn more about his background, or see what services he can bring to your organization.

follow me on:
Disclosure: The book links below are affiliate links. If you buy anything, I earn a commission, at no extra cost to you.
  • ignazioc says:

    great talk. We use Dep-Inj and this give the opportunity to test classes that otherwise can be hard to test.
    We use JSObjection.

  • >