We're using MSpec for unit tests after having previously used MbUnit.

I'm used to being able to say

Assert.IsTrue(status, "Status should be true");

in MbUnit, i.e. adding a message to the assertion which is output if it fails.

I can't find any corresponding functionality in MSpec. I'm testing that some XML validates and, if it fails, I want to report the validation error message. So my MSpec code looks like

string message;

bool isValid = ValidateXml(myXml, out message);

isValid.ShouldBeTrue();

But I want to be able to add the message to the test output if the ShouldBeTrue() fails.

Is this possible?

有帮助吗?

解决方案

Looking at the source for MSpec, no. The extension methods do not take a string parameter for a message.

You could trivially add the functionality yourself, in terms of code to write; the code is in machine.specifications / Source / Machine.Specifications / ExtensionMethods.cs. I don't know how hard it is to build.

For example you could create overloads of ShouldBeFalse and ShouldBeTrue like so:

[AssertionMethod]
public static void ShouldBeFalse([AssertionCondition(AssertionConditionType.IS_FALSE)] this bool condition, string message)
{
  if (condition)
    throw new SpecificationException(message);
}

[AssertionMethod]
public static void ShouldBeTrue([AssertionCondition(AssertionConditionType.IS_TRUE)] this bool condition, string message)
{
  if (!condition)
    throw new SpecificationException(message);
}

其他提示

There's no infrastructure for this at the moment, but like Matt I would suggest implementing your own "reporting" assertions on top of MSpec's built-in assertion library (possibly in a <Product>.ForTesting class library).

In all other cases, the It field tells what should be observable, hence the missing message parameter.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top