One reason is that tests can have their own state and ivars, and it wouldn't be a good idea to mix this with the class you want to test.
(...) All the xUnit packages are more or less derived from the original Smalltalk "SUnit". The seminal article is by Kent Beck, and can be found at http://www.armaties.com/testfram.htm . So there is also an historical reason for doing it in subclasses of Testcase. However, this can be done differently. For instance, Marcel Weiher advocates putting the tests in a category of the tested class.
(...)