使用 CppUnit 和 TFS2015 时"断言失败"消息不完整

'Assert Failed' message incomplete using CppUnit and TFS2015

本文关键字:消息 失败 断言 TFS2015 使用 CppUnit      更新时间:2023-10-16

正在使用: MSTest/CppUnit/TFS2015/VS2013/C++

正在调试一个在本地运行良好并在构建机器(我无权访问)上失败的测试。今天早上我坐下来,几乎所有的测试都通过了——除了一个。测试恰好比较了两个相当大的字符串,并且(通常)非常有用Assert failed. Expected:<...由于字符串太长而从未进入Actual:<...部分。这只是一个简单的:Assert::AreEqual(expectedStr, actualStr);.

现在我的解决方法是将文件写入我可以从测试中访问的网络路径(幸运的是,这已经是一个集成类型测试 - 但仍然......哦 - 我有没有提到我必须运行一个需要 40 分钟的构建,即使我在构建过程参数中将Clean Workspace设置为None才能运行测试?这是另一篇文章的另一个问题=/。

有没有办法查看测试断言失败的完整结果(例如,没有中断字符串比较)?也许是测试运行日志文件?

根据您的描述,您希望在C++中表达断言失败消息。检查此案例可能会帮助您:

"此问题的常见解决方案是创建断言宏。有关示例,请参阅此问题。该答案中他们的宏的最终形式如下:

#define dbgassert(EX,...) 
  (void)((EX) || (realdbgassert (#EX, __FILE__, __LINE__, ## __VA_ARGS__),0))

在您的情况下,realdbgassert将是一个函数,它将任何相关信息打印到stderr或其他输出控制台,然后调用断言函数本身。根据所需的信息量,您还可以执行堆栈转储,或记录任何其他有助于识别问题的相关信息。但是,它可以像传递 printf 式格式字符串和相关参数值一样简单。

请注意,如果编译器不支持可变参数宏,则可以改为创建采用特定数量参数的宏。这稍微麻烦一些,但如果编译器缺乏支持,则可以选择,例如:

#define dbgassert0(EX)  ...
#define dbgassert1(EX,p0)  ...
#define dbgassert2(EX,p0,p1)  ...

"