【问题标题】:Unit test throws exception but cannot see the message单元测试抛出异常但看不到消息
【发布时间】:2012-06-17 21:16:56
【问题描述】:

大家好,我正在通过测试驱动开发将国际象棋 AI 作为业余项目。但由于某种原因,我的测试给出的唯一消息是“测试引发了异常:...”。因此省略了唯一重要的事情。我现在必须右键单击并查看测试结果详细信息,而不是直接读取错误。我已尝试添加和删除列,但无法直接显示整个消息。

是否可以设置 VS2010,以便为每个单元测试直接显示异常消息?

编辑:我正在使用标准 VS 单元测试:

[TestClass]
public class MiniMaxTest
{
    [TestMethod]
    public void TestConstructor()
    {
        throw new Exception("Must I click view details to see this?");
    }
}

为什么要问这些问题?你们可以复制这些东西。调试或运行测试给出相同的消息:

【问题讨论】:

  • 您能提供更多细节吗?例如,您使用的是什么测试框架(MSTest)?你的测试是什么样的?
  • 您在使用 MSTest 吗?如果没有指定你的单元测试工具。另外你为什么不调试你的测试方法呢?
  • 如果我没看错,您是说显示消息的字段或列太短而无法显示整个异常?好吧,单元测试不应该经常失败,所以偶尔“点击查看详细信息”应该没什么大不了的?
  • 属性显示这是 MSTest
  • 您能否发布一个详细说明问题的屏幕截图?

标签: c# visual-studio unit-testing mstest


【解决方案1】:

不,我不相信您可以配置 VS 以不同方式显示它。 IDE 显示异常消息的第一行,并且完整的消息文本中有一个换行符,因此您需要单击进入详细信息才能查看整个内容。

但是,您可以做的是滥用 MSTest 框架来显示您自己的消息。

MS 测试断言都是通过抛出异常来实现的。所有 MS Test Assert 函数都会抛出源自 UnitTestAssertException 的异常。 Visual Studio 对这类异常有特殊处理。

例如:如果你写这个测试:

[TestMethod]
public void AllAboard()
{
    throw new AssertFailedException("Failboat");
}

AssertFailedException 是大多数其他断言失败的标准基类。

您会注意到 VS2010打印通用的“测试引发异常”消息,而只是打印“Failboat”。

现在您可以做的是围绕您的测试,将正常异常转换为AssertFailedException,然后您可以打印任何您喜欢的消息。

[TestMethod]
public void TestStuff()
{
    try
    {
        string o = null; // pretend this came from some real code
        var x = o.Split(new[] { ',' }); // this will throw NullRefException
    }
    catch (Exception e)
    {
        throw new AssertFailedException(e.Message, e);
    }
}

当然,我不建议实际这样做...它很冗长,更重要的是,您会丢失调用堆栈...但是,现在您的工具带中多了一个工具

【讨论】:

  • @Basic 是的,我完全不会这样做,但是 VS 没有给你任何选择......所以如果你真的想更改消息,那就是你必须做的: -)
猜你喜欢
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多