如何将测试夹具传递给 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】:您不能调用 protected
或 private
从类外部的方法,无论该方法是 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 中的辅助函数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Visual Studio 2005 设置 Google C++ 测试框架 (gtest)