In a unit test class there is a section for (Common scripts) found in the same drop down as the individual tests you add.
This section has "Test initialize" and "Test cleanup" where you can add code that runs before and after every test in that class.

Your general test structure would look like this;
- "Common scripts > Test initialize" : Setup generic data (and check any test initialize conditions).
- "My Test > Pre-test" : make any test specific data adjustments (and check any pre-test conditions).
- "My Test > Test" : Execute the testable code and check any test specific conditions.
- "My Test > Post-test" : clean up any test specific data (and check any post-test conditions).
- "Common scripts > Test cleanup" : clean up any generic data (and check and cleanup conditions).
That is half the battle. Unfortunately there doesn't appear to be a way to run the same test conditions for a number of tests.
However! Test initialize and Test cleanup can have their own test conditions, so if each of your unit tests for a particular stored procedure should result in the same output, e.g. always one row in a table (like an audit entry), then you could add this test condition to the Test cleanup instead; while keeping specific test conditions in the test where they belong.
It could be a little misleading that a core test is found in the Test cleanup section so it is a bit of a work around.
You would have to ensure that the Test cleanup section doesn't remove any data you want to check in your general test conditions as it would be executed first. I work around this by doing my cleanup in the initialize section just before setting up the data, in effect the clean up always puts the database into a known state regardless of what test had run before.
For the audit example, step 5. might confirm that [dbo].[Audit] has one record while step 1. will delete from [dbo].[Audit] returning the row count to 0.