我正在尝试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()说明符来模拟一个方法?
答案 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#644和gmock/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不支持异常规范。原因是他们认为异常规范主要是错误的,在实践中应该避免,即使你 广泛使用例外。
有一些消息来源支持这种观点:
Herb Sutter(“Exceptional C ++”和“More Exceptional。”一书的作者 C ++“):对异常规范的务实看法 http://www.gotw.ca/publications/mill22.htm
Anders Hejlsberg(C#的首席设计师):经过检查的麻烦 例外http://www.artima.com/intv/handcuffs.html
解决方案是将代码重写为:
virtual ReturnValue FunctionName() const throw();
然后使用:
MOCK_CONST_METHOD0( FunctionName, ReturnValue() );