首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试抛出异常,但看不到消息

单元测试抛出异常,但看不到消息
EN

Stack Overflow用户
提问于 2012-06-18 05:16:57
回答 1查看 3.3K关注 0票数 8

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

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

编辑:我使用的是标准VS单元测试:

代码语言:javascript
复制
[TestClass]
public class MiniMaxTest
{
    [TestMethod]
    public void TestConstructor()
    {
        throw new Exception("Must I click view details to see this?");
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-18 06:56:39

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

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

MS测试断言都是通过抛出异常实现的。所有MS测试Assert函数都会抛出从UnitTestAssertException派生的异常。Visual studio对这类异常有特殊的处理。

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

代码语言:javascript
复制
[TestMethod]
public void AllAboard()
{
    throw new AssertFailedException("Failboat");
}

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

您将注意到,VS2010不会打印通用的“测试抛出异常”消息,而只是打印“故障船”。

现在,您可以做的就是将常规异常转换为AssertFailedException,然后您可以打印任何您喜欢的消息。

代码语言:javascript
复制
[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);
    }
}

当然,我并不建议这样做...它很冗长,更重要的是,你失去了调用堆栈...但是,嘿,现在你的工具带里又多了一个工具

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11074850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档