Unit testing Basics [Jeff Wilcox]
Excellent Step by Step [Jeff Wilcox]
MSDN Download and Info
Basic Asynchronous Step by Step
I am probably abusing the framework with the way I have setup my test scripts, but I was looking to store state between each test so that I would not have to setup my application state every time I moved onto a new test.
I followed the main steps listed by Jeff Wilcox, however, I made a few alterations that would probably make him cringe ;)
- In each test cs file, I store an instance of the class I'm testing so that the state can be saved.
- In the PreparePage() function for each TestClass I check if that instance has been initialized. If it has, I do nothing, else I set it up. Since PreparePage is called before each TestMethod I want to make sure that my instance remains with the state of it's previous test.
- I name my tests, in order, alphabetically... often prefixed with "aa_
[DoThis]", "ab_[ThenThis] ". Since the tests appear to be ran in alphabetical order I want to keep a very scrict execution order so that my state should be known after every test. - I have made all my Test Classes partial, and have created a seperate file "TestSetup.cs" that acts as a central location for me to decide which scipts I want to run and when. Making the class partial allows me to stick the [TestClass] assmbly directive in another file, which means I can comment out scripts as I see fit.
GraphicCanvas_test.cs
public partial class GraphicCanvas_test : SilverlightTest}
{
private GraphicCanvas myCanvas;
[TestInitialize]
public void PreparePage()
{
if (myCanvas != null) { return; }
myCanvas = new GraphicCanvas();
}
...
TestSetup.cs
[TestClass] public partial class GraphicCanvas_test {} // Test script run
//[TestClass] public partial class PaletteManager_test {} // <-- Not run
I'm still playing around with unit testing framework, and I'm probably bending it how it wasn't meant to be bent - but I have yet to see something that would work better for me :)
.