Starting from summer’13 sales force announced that the test
class should be written outside of an apex class. You cannot save apex code
with version 28.0 or later if you have written test method inside an apex class.
The reason behind the scene is:
While executing
an apex class/ trigger sales force load the apex code into cache (a high speed
memory) to make better performance. If you have written test class inside an
apex class those test methods are also loaded into the cache memory and they stay
in the cache till execution completes. There is no need to load these test code
while executing apex class for any business logic.
The sales
force.com is a shared environment and if every apex class loads some test code
into the cache memory there will be a lot of space underutilized in the system,
thus causing others to wait. So sales force now won’t allow developers to write
test class inside an apex class for apex code saved using API version 28 or
later. But the existing code can be saved with earlier API version.