用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

    上一篇: Mocking a method with throw() specifier

    下一篇: Problem with getting the Camera to work on Away3DLite