Test-Driven Development with Java: Create higher-quality software by writing tests first with SOLID and hexagonal architectureAlan Mellor