Dependency is the key problem in software development at all scales. . . . Eliminating duplication in programs eliminates dependency.
The persistence layer (or, roughly speaking, database access code) is undoubtedly one of the most important parts of any enterprise project. Despite its importance, the persistence layer is hard to unit test, mainly due to the following three issues:
- Unit tests must exercise code in isolation; the persistence layer requires interaction with an external entity, the database.
- Unit tests must be easy to write and run; code that accesses the database can be cumbersome.
- Unit tests must be fast to run; database access is relatively slow.
We call these issues the database unit testing impedance mismatch, in reference to the object-relational impedance mismatch (which describes the difficulties of using a relational database to persist data when an application is written using an object-oriented language). We’ll discuss the issues in more detail in this chapter and show possible implementation and testing alternatives for Java database applications.