testmethod Code Snippet
This is an installment in my Zero-Friction TDD series.
If you are a regular reader of this blog, you may have noticed a certain pattern in my unit test examples (like this one). This is because I always follow the Four-Phase Test pattern (which is a superset of the more well-know Triple-A (Arrange Act Assert) pattern), with a few code comments to denote the different phases (incidentally, in this case, I don't regard these code comments as Apologies).
Writing the skeleton of such a test (the TestMethod attribute, the method declaration, the four comments) is very repetitious work, and I got tired of it around the third or fourth time I had to do it. Therefore, I wrote a code snippet that, in essence, just generates this template:
[TestMethod]
public void Test()
{
// Fixture setup
// Exercise system
// Verify outcome
Assert.Inconclusive();
// Teardown
}
From there, you are ready to go ahead and fill in the blanks. It saves me a bit of typing for every test I write and allows me to get started faster with formulating the actual value-adding code, while the structure reminds me to write good and maintainable tests.
I've been using this code snippet for more than a year now, and although I've considered many enhancements to it, I've always felt comfortable with the versatility that this simple implementation provides.
For your convenience, I've attached the code snippet to this post: Just download it and put it in your <Documents>\Visual Studio 2008\Code Snippets\Visual C#\My Code Snippets folder. Now you can just type testmethod and expand the snippet, and you have a structured Four-Phase Test ready to be implemented.
Once more, it saves you a bit of mental context switching, and you can focus on writing the test code that really matters.
Comments
Anonymous
December 01, 2008
PingBack from http://blogs.msdn.com/ploeh/archive/2008/11/13/zero-friction-tdd.aspxAnonymous
July 08, 2013
You can also use template for Resharper: [Test] public void $MethodName$$StateUnderTest$$ExpectedBehavior$() { $END$ }