Test code shouldn't be compiled into the final build. TDD or not, tests belong in a separate directory structure (possibly in the same package) so that the build process can ignore all the tests when building the package.
Keeping tests in the same package, however, allows for some behind the scenes access that tests may need that a public interface doesn't want to provide. There is debate on this point.
As a Java programmer (my apologies, I don't have access to a c#/.net environment), I find that unit testing the huge front end public call with all of the various variables daunting (often involving lots of mocks to get the right objects through to the right tests). Making something
protected (rather than
private or exposing it to
public) means that something in the same package (be it in another directory) will still be able to invoke it.