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
}
}