'Assert Failed' 使用 CppUnit 和 TFS2015 的消息不完整

'Assert Failed' message incomplete using CppUnit and TFS2015

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

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

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

的另一个问题

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

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

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

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

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

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

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

"