Unit vs Integration Tests: Understanding the Differences and Implementing in Java