用throw()说明符模拟一个方法

时间:2011-02-07 14:47:00

标签: c++ mocking googlemock

我正在尝试Google模拟一个具有throw()说明符的虚方法。原始函数如下所示:

virtual ReturnValue FunctionName() const throw();  

我收到编译错误:looser throw specifier for 'virtual FunctionSignature'

这是我到目前为止尝试过的代码:

MOCK_CONST_METHOD0( FunctionName, ReturnValue() );  
MOCK_CONST_METHOD0( FunctionName, ReturnValue() throw() );  
MOCK_CONST_METHOD0( FunctionName, ReturnValue() ) throw(); // Gives a different error entirely.

我已经尝试了几乎所有我能想到的其他组合,但这些组合似乎最符合逻辑。我如何使用throw()说明符来模拟一个方法?

3 个答案:

答案 0 :(得分:2)

据我所知,您必须使用“内部”GMOCK_METHOD0_宏,并使用:

GMOCK_METHOD0_(, const throw(), , FunctionName, ReturnValue)

MOCK_CONST_METHOD0(m, F)被定义为GMOCK_METHOD0_(, const, , m, F)gmock/gmock-generated-function-mockers.h#644gmock/gmock-generated-function-mockers.h#347定义了这一点。

答案 1 :(得分:1)

我的解决方案:创建一个虚函数的实现,它只包含传递给模拟方法。

MOCK_CONST_METHOD0( MockFunctionName, ReturnValue() );
virtual ReturnValue FunctionName() const throw()  
{  
    return MockFunctionName();  
}

然后,每当你需要编写Expect_Call或为该方法做任何事情时,只需参考MockFunctionName。

答案 2 :(得分:1)

Google mock不支持异常规范。原因是他们认为异常规范主要是错误的,在实践中应该避免,即使你 广泛使用例外。

有一些消息来源支持这种观点:

解决方案是将代码重写为:

virtual ReturnValue FunctionName() const throw();

然后使用:

MOCK_CONST_METHOD0( FunctionName, ReturnValue() );