使用CppUnit和TFS2015,“断言失败”消息不完整

时间:2016-02-26 14:44:27

标签: c++ tfs mstest cppunit

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

&#34;