I'm using Visual Studio 2010 Beta 2. I've got a single [TestClass]
, which has a [TestInitialize]
, [TestCleanup]
and a few [TestMethods]
.
Every time a test method is run, the initialize and cleanup methods are ALSO run!
I was under the impression that the [TestInitialize]
& [TestCleanup]
should only be run once, per local test run.
Is that correct? If not, what is the proper way to do this?
TestInitialize
andTestCleanup
are ran before and after each test, this is to ensure that no tests are coupled.If you want to run methods before and after ALL tests, decorate relevant methods with the
ClassInitialize
andClassCleanup
attributes.Relevant information from the auto generated test-file in Visual Studio:
You can use the following additional attributes as you write your tests:
this is rather standard behaviour for test suites: setup and teardown before and after each test. The philosophy is that tests should not depend on each other. If you want another behaviour, you should probably use static objects that persist between each test.
Methods that are marked with [TestInitialize()] attribute are used to prepare aspects of the environment in which your unit test will run. The purpose of this is to establish a known state for running your unit test. You may use the [TestInitialize()] method to copy, alter, or create certain data files that your test will use.
Create methods that are marked with [TestCleanUp{}] attribute to return the environment to a known state after a test has run. This might mean the deletion of files in folders or the return of a database to a known state. An example of this is to reset an inventory database to an initial state after testing a method that is used in an order-entry application.
For more information please refer : http://msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx
Full example taken from the microsoft documentation: