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

时间:2012-06-17 21:16:57

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

大家好我将Chess 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

1 个答案:

答案 0 :(得分: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);
    }
}

当然,我不建议实际执行此操作...它很冗长,更重要的是,你丢失了调用堆栈...但是,嘿,现在你的工具带中还有一个工具