static void

NUnit/MSTest Dual Testing

Run your tests in MSTest and in NUnit. This is a cool idea from MSDN magazine.

#if !NUNIT
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Category = Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute;
#else
using NUnit.Framework;
using TestClass = NUnit.Framework.TestFixtureAttribute;
using TestMethod = NUnit.Framework.TestAttribute;
using TestInitialize = NUnit.Framework.SetUpAttribute;
using TestCleanup = NUnit.Framework.TearDownAttribute;
using TestContext = System.Object;
#endif
 
namespace MTest
{
    /// <summary>
    /// A dual MSTest- NUnit Test supported test class.
    /// </summary>
    /// <remarks>
    /// MSTest: there are no categories, so we map Category to Description
    /// There is no RowTest (see DataDriven tests instead)
    /// NUnit: you can't use TestContext (mapped to object)
    /// </remarks>
    [TestClass]
    public class TestUnitTests
    {
        #region SetUp
        private TestContext testContextInstance;
        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get { return testContextInstance; }
            set { testContextInstance = value; }
        }
 
        /* Unlike NUnit, in MSTest the class is recreated for each test
        * You can use [ClassInitialize] public void TestFixtureSetUp(TestContext context)
        * but the stored object[s] (eg Repository) must be static too.
        * TestContext is not static so not useful for storing objects.
        */
        [TestInitialize]
        public void TestFixtureSetUp()
        {
            store = 1; //in MSTest this is called per test, in NUnit, once per class
        }
        private int store;
        #endregion
 
        #region Tests
        [TestMethod]
        public void TestMethod1()
        {
            store++;
            Assert.AreEqual(2, store);
        }
 
        [TestMethod]
        [Category("Maths Tests")] /*MSTest doesn't have categories, so we map this to description */
        [ExpectedException(typeof(System.DivideByZeroException))]
        public void DivideMethodTest()
        {
            int d = 0;
            int result = (2 / d);
        }
        #endregion
    }
}