8

我正在尝试 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.

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

4

3 回答 3

2

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

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

正如MOCK_CONST_METHOD0(m, F)#defineed to一样GMOCK_METHOD0_(, const, , m, F)gmock/gmock-generated-function-mockers.h#644gmock/gmock-generated-function-mockers.h#347定义了这一点。

于 2011-02-27T13:36:12.577 回答
1

Google mock 不支持异常规范。原因是他们认为异常规范主要是一种错误特性,在实践中应该避免,即使您广泛使用异常。

有一些资料支持这种观点:

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

virtual ReturnValue FunctionName() const throw();

然后使用:

MOCK_CONST_METHOD0( FunctionName, ReturnValue() );
于 2013-04-30T17:16:51.393 回答
1

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

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

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

于 2011-03-02T16:13:21.137 回答