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

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

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

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

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

最佳答案

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

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

MS测试断言均通过引发异常来实现。所有的MS Test Assert函数都抛出从UnitTestAssertException派生的异常。 Visual Studio对此类异常进行了特殊处理。

例如:如果您编写此测试:

[TestMethod]
public void AllAboard()
{
    throw new AssertFailedException("Failboat");
}
AssertFailedException是大多数其他断言失败的标准基类。

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

现在,您可以做的就是将测试包含在将正常异常转换为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);
    }
}

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

关于c# - 单元测试引发异常,但看不到该消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11074850/

10-10 18:40
查看更多