用throw()说明符嘲笑一个方法
我正在尝试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()说明符嘲笑一个方法?
从我所知道的,你必须使用“内部” GMOCK_METHOD0_
宏,并使用:
GMOCK_METHOD0_(, const throw(), , FunctionName, ReturnValue)
因为MOCK_CONST_METHOD0(m, F)
#defineed为GMOCK_METHOD0_(, const, , m, F)
,所以gmock / gmock-generated-function-mockers.h#644和gmock / gmock-generated-function-mockers.h#347定义那。
我的解决方案:创建虚拟函数的实现,其中仅包含传递给嘲笑的方法。
MOCK_CONST_METHOD0( MockFunctionName, ReturnValue() );
virtual ReturnValue FunctionName() const throw()
{
return MockFunctionName();
}
然后,无论何时您需要编写Expect_Call或为该方法执行任何操作,请参阅MockFunctionName。
Google模拟不支持异常规范。 原因是他们认为异常规范大多是错误的,即使您广泛使用异常,也应该在实践中避免。
有一些来源支持这种观点:
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() );
链接地址: http://www.djcxy.com/p/4791.html