我们在之前使用过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()
添加到测试输出中。
这可能吗?
答案 0 :(得分:6)
查看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);
}
答案 1 :(得分:1)
目前还没有基础设施,但像Matt一样,我建议在MSpec的内置断言库(可能在<Product>.ForTesting
类库中)实现自己的“报告”断言。
在所有其他情况下,It
字段告诉应该可观察的内容,因此缺少消息参数。