3

我目前遇到以下问题:

我们通过使用 Visual Studio 2015 中包含的本机 microsoft 单元测试框架将单元测试引入我们的本机 c++ 应用程序Microsoft::VisualStudio::CppUnitTestFramework

要在 Visual Studio 中启动单元测试,我们使用如图Test-Explorer1 所示。通过将 a 添加method attribute到 a Test-Method(如图 2 所示),Test-Explorer允许按属性排序和过滤(如图 3 所示)。

在此处输入图像描述

所有这些都没有问题。当我们尝试将这些单元测试实施到我们的持续集成系统 (CI) 中时,我们开始遇到问题。

要从我们使用的控制台启动单元测试,该控制台vstest.console.exe位于:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe. 官方文档可以在这里找到。

以下屏幕截图显示了使用控制台时测试如何成功: 在此处输入图像描述

添加记录器并将文件输出到 .trx 也很有效。然而,不起作用的是应用过滤器来确定具有特定属性的测试。/TestCaseFilter:根据文档,使用-switch应该可以实现类似的操作。但是,以下屏幕截图显示了由此产生的错误:

在此处输入图像描述

它转换为:“没有与过滤器匹配的测试,因为它包含一个或多个无效属性 (TakesLong)。指定包含有效属性 (TestCategory、Priority、FullyQualifiedName、Name) 的过滤器表达式,然后重试。”

有人知道这个问题或对如何解决这个问题有想法吗?最终目标是能够排除某些测试(需要很长时间/需要硬件加密狗等)。

最好的问候, 洛托索

4

1 回答 1

0

我也遇到了这个问题,可悲的是,看起来我们只是不走运。vstest.console.exe 仅支持有限数量的 C++ 和 C# 过滤器。

我认为我将要采用的方法是将测试分离到不同的模块中,这样我就可以为每晚运行单元测试,并且仅为发布运行 CI 构建和集成测试(如需要数据库)。

或者,您可以在同一模块中按名称空间将它们拆分,并使用 FullyQualifiedName 过滤器。不幸的是,也没有 '!~' 条件,所以你可能不得不以某种方式解决这个问题。

于 2017-03-22T23:14:11.030 回答