Testing Your SUT Against Exceptions

When you test your method for exceptions (which is good practice) the usually naive approach - which btw I was following myself till today - is to wrap your method under test with an appropriate try-catch and set a boolean.
[TestMethod]
public void TestMapPositionUpdate_NullPosition_ShouldFireArgumentException()
{
//Setup
Position nullPosition = null;

//Exercise
bool exceptionCaught = false;
try
{
ObjectMapper.MapPositionUpdate(nullPosition, "", "", false, "someValue");
}
catch (ArgumentException)
{
exceptionCaught = true;
}

//Verify
Assert.IsTrue(exceptionCaught, "The exception should have happened");
}
I really don't like this approach because it involves writing a lot of code just to verify an exception has been raised and consequently it clutters up the test code and impacts on the readability.
Today I found that MS unit tests provides a nice attribute to overcome this problem, namely ExpectedException. This allows to nicely refactor the previous test method as follows:
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestMapPositionUpdate_NullPosition_ShouldFireArgumentException()
{
//Setup
Position nullPosition = null;

//Exercise
ObjectMapper.MapPositionUpdate(nullPosition, "", "", false, "someValue");
}
Clean, isn't it. Already by looking at this test code, you immediately understand what it is about. If you happen to know other such interesting attributes, feel free to leave a comment ;)
Kindle

Comments

0

Your ad here?