MrF*_*Fox 8 c# unit-testing mstest visual-studio
嗨,我正在制作一个国际象棋AI作为测试驱动开发的业余爱好项目.但由于某种原因,我的测试给出的唯一信息是"测试抛出异常:......".因此,省略唯一重要的事情.我现在必须右键单击并查看测试结果详细信息,而不是直接读取错误.我已经尝试添加和删除列,但我无法直接显示整个消息.
可以设置VS2010,以便直接显示每个单元测试的异常消息吗?
编辑:我正在使用标准VS单元测试:
[TestClass]
public class MiniMaxTest
{
[TestMethod]
public void TestConstructor()
{
throw new Exception("Must I click view details to see this?");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这些问题?你们可以重现这些东西.调试或运行测试给出相同的消息:

不,我不相信你可以配置 VS 以不同的方式显示它。IDE 显示异常消息的第一行,并且完整消息文本中有一个换行符,因此您需要单击详细信息才能查看整个内容。
然而,您可以做的是滥用 MSTest 框架来显示您自己的消息。
MS测试断言都是通过抛出异常来实现的。所有 MS TestAssert函数都会抛出源自UnitTestAssertException. Visual Studio 对此类异常有特殊处理。
例如:如果您编写此测试:
[TestMethod]
public void AllAboard()
{
throw new AssertFailedException("Failboat");
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
当然,我不建议实际这样做...它很冗长,更重要的是,您会丢失调用堆栈...但是嘿,现在您的工具带中又多了一个工具