2016-02-26 111 views
0

使用:MSTest的/的CppUnit/TFS2015/VS2013/C++“断言失败”的消息不完全使用的CppUnit和TFS2015

我调试运行在本地罚款和失败构建机器上(我没有测试可使用)。今天早上我坐下来,几乎所有的测试都通过了 - 除了一次。测试恰好是比较两个相当大的字符串,并且(通常)非常有帮助的Assert failed. Expected:<...从未将它放到Actual:<...部分,因为字符串太长。这只是一个简单的:Assert::AreEqual(expectedStr, actualStr);

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

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

+0

您在使用XAML构建或vNext建立你怎么TFS过程中使用的MSTest建立你怎么了?配置构建定义? –

+0

这些都是很好的问题,但我不能回答由于工作限制 - 更不用说简短的答案是...方式太复杂的评论;)。我接受你的答案是最相关的并且唯一)解决方案。谢谢。 – PerryC

回答

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) \ ...