【问题标题】:'Assert Failed' message incomplete using CppUnit and TFS2015使用 CppUnit 和 TFS2015 的“断言失败”消息不完整
【发布时间】:2016-02-26 14:44:26
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您使用的是 XAML 构建还是 vNext 构建?在 TFS 构建期间如何使用 MSTest?如何配置构建定义?
  • 这些都是很好的问题,但由于工作限制,我无法回答——更不用说简短的回答......太复杂了,无法发表评论;)。我接受您的回答作为最相关(也是唯一)的解决方案。谢谢。

标签: c++ tfs mstest cppunit


【解决方案1】:

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

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

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

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

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

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

"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多