Real code needs to be maintained. Real code has assumptions that are not well documented. Real code is changed by people who forget or never knew those assumptions. Trust the tests, dont trust the code.
Real TDD allows you to create the object and its methods before implementation. You need a clear model before you can write a test case anyway.
So generate the object(s), add the methods, parameters etc. Probably using UML2 would be best, then write the test cases for those, and then implement the objects. After that run the profiler and find out how horrible your code really is, and refactor.
As a general solution it is almost always best to write a factory object to instantiate and initialize your objects. The closer you get to core functionality the more this becomes important.
Write tests for your expected failures and exceptions. use a check to make sure.
Finally write each test and watch it fail before you write the code to make it succeed.