Unit Testing with Dependency Injection Containers

Jakob Jenkov
Last update: 2014-05-24

If you are using a dependency injection container in your application, you can use the container to inject mock objects into your units during unit testing.

Due to how dependency injection affects your design, injecting mocks is already easier, even if you don't use the dependency injection container during your unit tests. Many components can be tested without the use of the dependency injection container, if their dependencies are simple to mock out. However, some more complex components may be easier to test by having them configured by your dependency injection container.

A dependency injection container is usually configured using either code, or some configuration file. During unit testing you would need either a completely different configuration file or code, or you would need a way to modify the existing configuration files or code, from inside your unit tests.

The dependency injection container that I've developed, Butterfly DI Container, enables you to replace factory definitions at runtime. That way, you can use the production configuration as a base during your unit tests, and then just replace the factories of the objects you need to mock out, with mock object factories.

This diagram illustrates the principle of replacing a dependency with a mock object during unit tests:

Testing with Dependency Injections Containers
Testing with Dependency Injections Containers.

Jakob Jenkov

Featured Videos

Java ForkJoinPool

P2P Networks Introduction


Java Persistence
Close TOC
All Tutorial Trails
All Trails
Table of contents (TOC) for this tutorial trail
Trail TOC
Table of contents (TOC) for this tutorial
Page TOC
Previous tutorial in this tutorial trail
Next tutorial in this tutorial trail