A bunch of people. Manifesto for Agile Softare Development. The manifesto doesn't have the word "test", but try to live by it and you will find yourself testing.
North, Dan Introducing BDD. Words matter, and the difference between "behavior" and "test" is important. BDD evolved from TDD, but it has become something quite different, and can drive the way you think about software.
Rudolph, Jason. A Brief Discussion of Code Coverage Types. Understand the different types of code coverage, and how you can use them in conjunction with other techniques to improve your tests.
Wikipedia. Refactor Mercilessly: works espeically well if you test relentlessly, integrate continuously, and do the simplest thing that could possibly work.
Fields, Jay Developer Testing and the Importance of Context. Links to about a dozen articles that Jay has written about testing. Read each, and consider how/whether they would apply on your project.
Rudoplh, Jason. Refactotum: 2GX Edition: With good testing habits, you can quickly make a positive impact, even on an unfamiliar codebase.
Rudolph, Jason. Testing Anti-Patterns: Overspecification. You can have too much testing. If tests specify details irrelevant to the real purpose of the code, they make it unnecessarily difficult to refactor the code in the future.
Rudolph, Jason. Testing Anti-Patterns: Underspecification. Tests often do too little, and cover only part of the behavior. It is impossible to test every case, but it is critical that you develop a sense for testing boundary cases.
Additional Reading
Beust, Cedric. Don't Call Super. It can be difficult to reuse code across JUnit test cases. Inheritance more than one-deep from TestCase is fragile and error-prone.