如何在MSpec中输出带有It断言的消息

时间:2011-03-30 10:49:41

标签: unit-testing assert mspec

我们在之前使用过MbUnit之后使用MSpec进行单元测试。

我以前能够说

Assert.IsTrue(status, "Status should be true");
在MbUnit中的

,即向断言添加消息,如果失败则输出该消息。

我在MSpec中找不到任何相应的功能。我正在测试一些XML验证,如果失败,我想报告验证错误消息。所以我的MSpec代码看起来像

string message;

bool isValid = ValidateXml(myXml, out message);

isValid.ShouldBeTrue();

但是如果message失败,我希望能够将ShouldBeTrue()添加到测试输出中。

这可能吗?

2 个答案:

答案 0 :(得分:6)

查看MSpec的来源,没有。扩展方法不为消息采用字符串参数。

您可以根据要编写的代码自行添加功能;代码在machine.specifications / Source / Machine.Specifications / ExtensionMethods.cs中。我不知道建设有多难。

例如,你可以创建ShouldBeFalseShouldBeTrue的重载,如下所示:

[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);
}

答案 1 :(得分:1)

目前还没有基础设施,但像Matt一样,我建议在MSpec的内置断言库(可能在<Product>.ForTesting类库中)实现自己的“报告”断言。

在所有其他情况下,It字段告诉应该可观察的内容,因此缺少消息参数。