I’m completely new at C# and NUnit.
In Boost.Test there is a family of BOOST_*_THROW macros. In Python’s test module there is TestCase.assertRaises method.
As far as I understand it, in C# with NUnit (2.4.8) the only method of doing exception test is to use ExpectedExceptionAttribute.
Why should I prefer ExpectedExceptionAttribute over – let’s say – Boost.Test’s approach? What reasoning can stand behind this design decision? Why is that better in case of C# and NUnit?
Finally, if I decide to use ExpectedExceptionAttribute, how can I do some additional tests after exception was raised and catched? Let’s say that I want to test requirement saying that object has to be valid after some setter raised System.IndexOutOfRangeException. How would you fix following code to compile and work as expected?
[Test] public void TestSetterException() { Sth.SomeClass obj = new SomeClass(); // Following statement won't compile. Assert.Raises( 'System.IndexOutOfRangeException', obj.SetValueAt( -1, 'foo' ) ); Assert.IsTrue( obj.IsValid() ); }
Edit: Thanks for your answers. Today, I’ve found an It’s the Tests blog entry where all three methods described by you are mentioned (and one more minor variation). It’s shame that I couldn’t find it before :-(.
I’m surprised I haven’t seen this pattern mentioned yet. David Arno’s is very similar, but I prefer the simplicity of this: