> No, you can't have your tests clean up after themselves. For two > reasons. First, that means you have to scatter house-keeping crap all > over your tests. Second, if you have a test failure you want the > results to be sitting there in the database to help with debugging.
There is another way to have tests clean up after themselves, which addresses both the shortcoming you address. First, I have functions like "insert_test_user()". At the end of these functions, there is another call like this: schedule_test_user_for_deletion(...) That inserts a row into a table "test_ids_to_delete" which includes column for the table name and primary key of the entity to delete. Another column has the insertion timestamp. So, there's no "clean-up" code in all of our test scripts, and we have the data there for debugging when the tests are done. In Jenkins, after the test suite runs, a job to "Delete Test Data" is kicked off, which deletes all test data older than hour. (Longer than it takes the test suite to run). There's a third reason not to do in-line test clean-up, which is that a SQL "DELETE" operation can be relatively slow, especially when complex RI is involved. Doing this "offline" as we do speeds that up. There are still a few places where we have clean-up code in tests, but it is exception. Those are the cases in which we can't use functions like "insert_test_user()". For example, if we are creating an entity by filling out a form on the web and submitting it, then we may need to manually register that for clean up later. Mark