Recommending a book depends on what you want. From a unit testing perspective, Dave Astels' Test-Driven Development: A Practical Guide covered a lot of topics with an example, but it's gotten dated as well. Test Driven: TDD and Acceptance TDD for Java Developers by Lasse Koskela started off great but then accelerated enough that it makes a better overview book than an in-depth book, I found. The Pragmatic Programmers' book on Pragmatic Unit Testing in Java with JUnit has some basic things about unit testing, and provides some basic heuristics for test design. It's a bit simplistic in some ways, but a good starting point. Brian Marick's The Craft of Software Testing also covers a lot of unit testing related topics.
From the perspective of functional testing and other types of testing traditionally done by testers instead of developers, Lee Copeland's A Practitioner's Guide to Software Test Design covers a lot of techniques. Paul Jorgensen's SOftware Testing: A Craftsman's Approach also covers a lot of techniques. Software Quality Engineering: Testing, Quality Assurance, and Quantifiable Improvement by Jeff Tian explains some things better than other books I've looked at, so it might be worth looking at, as well. Finally, I also like Kaner, Bach, and Pettichord's Lessons Learned in Software Testing, which covers a lot of ground in small chapters.