如何将测试夹具传递给 C++ GTest 中的辅助函数

Posted

技术标签:

【中文标题】如何将测试夹具传递给 C++ GTest 中的辅助函数【英文标题】:How to pass a test fixture to a helper function in C++ GTest 【发布时间】:2020-12-08 04:58:44 【问题描述】:

我的测试夹具中有一个受保护的静态方法,我希望从辅助函数调用,而不是从单元测试函数本身调用。

class Fixture

  ...
protected:
    static void fixture_func( int foo );
;

void helper_func( int bar ) 
  Fixture::fixture_func( bar );


TEST_F( Fixture, example_test ) 
  fixture_func( 0 );  //Line 1: This is how you would normally call the method
  
  helper_func( 0 );  //Line 2: This is how I need to call the method

当我尝试第 2 行时,我显然收到一个错误,指出该方法“不可访问”,因为它是 fixture 中的受保护方法。我怎样才能以某种方式将测试夹具传递给helper_func,或者将fixture_func 放在helper_func 的范围内?

如果您想知道,简单地从单元测试本身调用fixture func 不是一种选择,因为我正在设计一个测试框架,旨在简化针对特定目的使用fixture_func。我也没有能力对fixture 进行重大更改。

【问题讨论】:

【参考方案1】:

不能调用 protectedprivate 从类外部的方法,无论该方法是 static 还是调用函数是 C 风格的。

在任何情况下,您都需要在 fixture_func 之前使用类范围 Fixture::

void helper_func( int bar ) 
  Fixture::fixture_func( bar );

你需要让fixture_func变成public,你可以试试:

class FixtureExpanded : public Fixture  ;
void helper_func( int bar ) 
  FixtureExpanded::fixture_func( bar );

【讨论】:

是的,我忘记在问题中将我的电话放在fixture_func 的范围内,但我确实在我的代码中尝试过。我喜欢你的想法,让我的整个测试框架类成为 Fixture 的衍生物,我认为这将解决我的问题。谢谢!

以上是关于如何将测试夹具传递给 C++ GTest 中的辅助函数的主要内容,如果未能解决你的问题,请参考以下文章

无法将二维数组传递给 C++ 中的辅助函数

如何使用 clojure.test 将值从夹具传递到测试?

gtest从一无所知到熟练使用如何用gtest写单元测试

如何使用 Visual Studio 2005 设置 Google C++ 测试框架 (gtest)

C++ - 使用带有结构的 GTest 值参数化测试会导致 valgrind 错误

如何使用 CMake 在 C++ 代码中运行 gtest? (未见测试)