2012-06-17 72 views
6

大家好我正在做一个国际象棋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

+1

您使用MSTest吗?如果不指定你的单元测试工具。你为什么不调试你的测试方法? – BrokenGlass

+0

如果我说得对,您是说显示消息的字段或列太短而无法显示整个异常?那么,单元测试不应该经常失败,所以“点击查看细节”偶尔应该不是什么大不了的事情? – Groo

回答

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); 
    } 
} 

当然,我不建议这样做实际上这...这是冗长,而且更重要的是,你失去调用堆栈...但是,嘿,现在你已经得到了你的工具区多了一个工具

+0

+1对于一个可行的解决方案,但我同意它看起来像过度杀伤 – Basic

+0

@Basic是的,我完全不会这样做,但VS不给你任何选择...所以如果你reaaaaaaaaaaaally想改变消息,这是你必须做的:-) –