views:

440

answers:

4

I would like to be able to add a "message" to a unit test, such that it actually appears within the TestResult.xml file generated by NUnit. For example, this is currently generated:

<results>
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" />
</results>

I would like to be able to have an additional attribute (or node as the case may be), such as:

<results>
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" message="Tested that some condition was met." />
</results>

The idea is that "message" above would somehow be defined within the test method itself (in my case, generated at run-time). Is there a property somewhere that I'm missing to be able to do something like this?

+1  A: 

This may be missing the point, but how about naming the tests so they indicate what they test - then you may not even need the message.

If it proves to be absolutely necessary, I think you'll need to produce your own testrunner that would (off the top of my head) read an additional attribute off the TestCase and attach it to the output.

Blair Conrad
You confirmed that I either needed to do some reflection magic and dynamically create and name tests at runtime, or that I had to create a custom test runner.
Ryan Duffield
A: 

@Blair: You're not totally off-base. However, the conditions that are being tested that I want to add to TestResult.xml are generally unknown until run-time. Right now I simply Console.WriteLine them. These tests are probably more aptly called "test-runners" where only some end-state values are actually asserted.

I suppose along these same lines I could dynamically create and name these test methods using reflection, but I think that's starting to go overboard. :-)

I will continue investigating creating a TestRunner in the meantime, though.

Ryan Duffield
A: 

I can't see anything available at run time, but there are a couple of features that you might want to investigate: the Description attribute and the Property attribute both add text to the XML output file. Unfortunately, they're both defined at compile time.

Don Kirkby
+1  A: 

In the recent NUnit releases you can do:

Assert.AreEqual(250.00, destination.Balance, "some message here");

Where "Some message here" can be a constant message or a message generated at runtime and stored in a string variable. These messages will only appear in the output however if the assertion fails. Usually, however, you only need information about failing tests so I recommend building up a string by adding each previous message and then using that string variable as the message in all of your asserts. This allows you to get all of the information you need from failing tests.

Cpt. Jack Sparrow
Fantastic that's exactly what I was looking for!
Jon Cage