单元测试抛出异常但无法查看消息

8
大家好,我正在使用测试驱动开发制作一个象棋AI作为个人兴趣项目。但是出现了一个问题,我的所有测试都只显示“测试引发异常:…”,而没有给出任何有用的信息。现在我必须右键点击并查看测试结果详情来查看错误信息。我已经尝试添加和删除列,但仍无法直接显示完整的消息。
请问VS2010是否可以设置,使得每个单元测试的异常消息直接显示出来?
编辑:我正在使用标准的VS单元测试。
[TestClass]
public class MiniMaxTest
{
    [TestMethod]
    public void TestConstructor()
    {
        throw new Exception("Must I click view details to see this?");
    }
}

为什么会出现这种问题?你们可以重现这些事情。调试或运行测试会给出相同的消息:exception message remains hidden

2
你能提供更多细节吗?例如,你使用什么测试框架(MSTest)?你的测试是什么样子的? - stakx - no longer contributing
1
你正在使用MSTest吗?如果不是,请指定你的单元测试工具。另外,为什么不直接调试你的测试方法呢? - BrokenGlass
如果我理解正确的话,您是在说显示消息的字段或列太短而无法显示整个异常?嗯,单元测试不应该经常失败,所以偶尔“点击查看详情”应该不是什么大问题吧? - vgru
属性显示这是MSTest。 - flq
1
你可以发布一个详细描述问题的屏幕截图吗? - Arran
显示剩余4条评论
1个回答

2
不,我不相信你可以配置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没有给你任何选项...所以如果你真的想改变消息,那就是你必须做的 :-) - Orion Edwards

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接