C++ 如何运行彼此完全隔离的google测试?

C++ 如何运行彼此完全隔离的google测试?,c++,googletest,address-sanitizer,C++,Googletest,Address Sanitizer,我想使用地址消毒器在单元测试运行时检测运行时错误。但是,地址消毒器在发现第一个错误时终止应用程序,因此我无法在一个报告中看到所有发现的运行时错误的信息。如果我可以独立运行google测试,并且一个测试的终止不会影响其他测试,这是可能的。您可以在google测试中逐个运行特定的测试用例 发件人: 默认情况下,Google测试程序运行用户定义的所有测试。 有时,您只希望运行测试的一个子集(例如 调试或快速验证更改)。如果设置GTEST_过滤器 环境变量或过滤器字符串的--gtest_过滤器标志, G

我想使用地址消毒器在单元测试运行时检测运行时错误。但是,地址消毒器在发现第一个错误时终止应用程序,因此我无法在一个报告中看到所有发现的运行时错误的信息。如果我可以独立运行google测试,并且一个测试的终止不会影响其他测试,这是可能的。

您可以在google测试中逐个运行特定的测试用例

发件人:

默认情况下,Google测试程序运行用户定义的所有测试。 有时,您只希望运行测试的一个子集(例如 调试或快速验证更改)。如果设置GTEST_过滤器 环境变量或过滤器字符串的--gtest_过滤器标志, Google Test将只运行其全名(以 TestCaseName.TestName)匹配筛选器

筛选器的格式是以“:”分隔的通配符模式列表 (称为正模式)可选后跟“-”和 另一个“:”分隔的模式列表(称为负模式)。A. 当且仅当test匹配任何阳性值时才匹配筛选器 但与任何负面模式都不匹配

模式可以包含“”(匹配任何字符串)或“?”(匹配任何字符串) 单个字符)。为方便起见,过滤器“NegativePatterns” 也可以写为“-NegativePatterns”

例如:

./foo_测试没有标志,因此运行所有测试

./foo_test--gtest_filter=*也会运行所有内容,因为 匹配一切*值

./foo_test--gtest_filter=FooTest.*运行测试用例中的所有内容 足部的

./foo_test--gtest_filter=Null:构造函数运行其 全名包含“Null”或“Constructor”

/foo_测试--gtest_过滤器=-死亡测试。运行所有非死亡测试

./foo_test--gtest_filter=FooTest.*-FooTest.Bar运行中的所有内容 除FooTest.Bar外的测试用例FooTest.Bar


假设您谈论的是clang address sanitizer,下面是官方常见问题解答中的一句话:“AddressSanitizer在报告第一个错误后是否可以继续运行?答:是的,它可以[…]这有点实验性[…]要启用错误后继续,请使用-fsanize recover=address编译代码,然后使用ASAN_OPTIONS=halt_on_error=0运行代码。”当然,错误越多,出现虚假错误的可能性就越高……好吧,AddressSanitizer可以在报告第一个错误后继续运行,但实际上我需要一点不同的行为。如果测试方法中存在错误,我希望AddressSanitizer报告此错误,中断此测试方法的执行并运行下一个测试方法。一般来说,我认为这样做不明智。ASAN警告您发生了内存损坏(因此您的代码具有未定义的行为);因此,不管怎样,连续的测试可能会产生假阴性/假阳性…但是,集合中的一个测试中发生的任何错误都将终止集合中所有其他测试的执行。如果测试文件中有
n
测试,然后使用不同的值
--gtest_filter
运行测试
n次
,选择不同的测试。但它不是自动化的。