Eu acabei de ler Growing Objected-Oriented Software, Guided by Tests e posso dizer que é um livro altamente recomendável.

Para quem está interessado em começar, ou já começou e quer apefeiçoar a prática de desenvolver software usando testes antes de escrever o “código de produção”, é um ótimo livro.
Testing is no longer just about keeping defects from the users; instead, it’s about helping the team to understand the features that users need and to deliver those features reliably and predictably.
Após duas partes teóricas, o livro, na terceira parte, começa a ficar mais prático.
A terceira parte do livro se passa toda desenvolvendo um exemplo e realmente evoluindo uma aplicação aos poucos. Exemplo feito em Java, mas que nada atrabalha para quem não conhece muito da linguagem. Além disso, é ótimo seguir a linha de pensamento dos autores e ver como eles enxergam a evolução de um software orientado a objetos. E uma das melhores partes de sistema de exemplo, é que ele não fica no básico, muito pelo contrário, traz problemas do “mundo real”, como interação com serviços externos e testes de interface de usuário.
Embora a terceira parte seja ótima, é na quarta parte onde o livro realmente mostra seu valor. A quarta parte fala de desenvolvimento orientado a testes de forma sustentável, tratando de assuntos como: quando usar objetos mock ou não, facilitar a leitura e o entendimento dos testes, construção de objetos complexos necessários aos testes, entre outros.
Ainda existe um capítulo muito interessante que fala sobre testes na camada de persistência a dados, uma parte que eu sempre achei complexa de se testar. Ali, encontrei dicas valiosas.
Uma ótima leitura, recomendo!
Pingback: Falando de TDD | Blog da Concrete