I find that unit testing can really corrupt a program's structure. Especially dependency injection which takes a normal top-to-bottom flow and flattens it out to a degree that makes it hard to decipher what is actually happening. So instead of A calling B calling C, C will be injected into B which will be injected into A and then the whole thing will be unwound. On a large scale it can start to look like interface soup. Perhaps interface-oriented programing would be a more fitting name than object-oriented. It certainly doesn't look like the classical OO style.
Having said all that, I would be loathe to give up all my regression tests. The freedom I have to change major parts of the program knowing I have all the tests watching my back is invaluable. As is the benefit of being able to codify my hard won knowledge about edge cases and the like which I'm bound to forget and lose track of.
I just wish I didn't have to give up a more natural coding style to get the benefits of unit testing. Perhaps a language designed from the ground up to support unit testing is the answer?