If you are using an Object-Oriented language (writing code in a DSL can change things a bit, it depends on the DSL) you should specify and verify the objects themselves and not how they are implemented.
Aggregations and compositions are not just collaborations; they are part of the class internal design and should not be exposed; not even to tests.
Let me try to compile here a list with the books I've read in 2010. I'll also add a very quick review.
If you consider yourself to be mature enough, to drop testing pay attention to the minefields you may be leaving behind.
So far, my experience with TDD in functional programming is that it is just as beneficial in this paradigm as it is in more traditional ways to think about software.
I shouldn't try to sell the tools I find useful in my tiny little corner of the development world to everyone
Slides from the presentation