8

在之前使用过 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()

这可能吗?

4

2 回答 2

7

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

您可以自己简单地添加功能,就要编写的代码而言;代码在machine.specifications / Source / Machine.Specifications / ExtensionMethods.cs. 我不知道建造有多难。

例如,您可以像这样创建ShouldBeFalse重载ShouldBeTrue

[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);
}
于 2011-03-30T11:18:24.393 回答
1

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

在所有其他情况下,该It字段说明什么应该是可观察的,因此缺少消息参数。

于 2011-03-30T12:04:25.823 回答