This site has some interesting papers relating to teaching TDD and Extreme Programming. They list common problems with teaching TDD and XP, how they tried to solve it, and there are also some papers detailing how to do some TDD design of abstract classes and interfaces. I should really read all of these. I find myself in the position of questioning a lot about my own methods of teaching these "hard" topics, and its nice to know that the difficulties I'm experiencing are shared by more people.