Atomicity requires that you destroy the artefacts produced by the first test so that you do no contaminate the environment for the next. This can be a pain to achieve when your "units" have dependencies that are complicated to setup. Imagine testing a user login functionality. You need to have a database running with correct data records to simulate all the different scenarios. Dropping and recreating the database for every unit test (assuming you have correctly opted out of using mocks) is a total waste of time and effort. Having said that, you still do want contaminate your testing. That can be solved with creative engineering. In the example above, you can create data for multiple users, each user being used in one or two tests only. You can also refresh your data with every new run.