unit-testing - 如何在 MSpec 中使用 It 断言输出消息

标签 unit-testing assert mspec

我们正在使用MSpec用于之前使用过 MbUnit 后的单元测试。

我已经习惯了说

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

在MbUnit中,即向断言添加一条消息,如果失败则输出该消息。

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

string message;

bool isValid = ValidateXml(myXml, out message);

isValid.ShouldBeTrue();

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

这可能吗?

最佳答案

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

就要编写的代码而言,您可以自己轻松添加功能;代码位于 machine.specifications/Source/Machine.Specifications/ExtensionMethods.cs 中。不知道 build 起来有多难。

例如,您可以创建 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);
}

关于unit-testing - 如何在 MSpec 中使用 It 断言输出消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485314/

相关文章:

testing - 将 "story"转换为 MSpec 规范

java - 从 PIT 执行中排除测试

c# - 使用 T-SQL 更改 filstream 目录权限?

javascript - 在规范 `assert` 中复制 Node.js `expect` 断言

c - C 中的静态断言

c++ - Boost序列化断言失败

c# - 异步事件监听器的 Moq Raise

php - TypeError: class::functionName() 的返回值必须是/Interface 的实例,返回 null

tdd - 我应该在单元测试级别使用 specflow 吗?

.net - Appharbor 上的 MSpec