8

throw() 指定子を持つ仮想メソッドを Google でモックしようとしています。元の関数は次のようになります。

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() 指定子を使用して Google がメソッドをモックするにはどうすればよいですか?

4

3 に答える 3

2

私が知る限り、「内部」GMOCK_METHOD0_マクロを使用し、次を使用する必要があります。

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

gmock / MOCK_CONST_METHOD0(m, F)gmock -generated-function-mockers.h#644およびgmock/gmock-generated-function-mockers.h#347 に #defineedGMOCK_METHOD0_(, const, , m, F)が定義されているように、それを定義します。

于 2011-02-27T13:36:12.577 に答える
1

私の解決策:モックされたメソッドへのパススルーのみで構成される仮想関数の実装を作成します。

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

次に、Expect_Call を記述するか、そのメソッドに対して何かを行う必要があるときはいつでも、MockFunctionName を参照してください。

于 2011-03-02T16:13:21.137 に答える
1

Google モックは例外仕様をサポートしていません。その理由は、たとえ例外を広範囲に使用したとしても、例外仕様はほとんどが誤機能であり、実際には避けるべきだと考えているからです。

この観点を支持する情報源がいくつかあります。

解決策は、コードを次のように書き直すことです。

virtual ReturnValue FunctionName() const throw();

そして、次を使用します。

MOCK_CONST_METHOD0( FunctionName, ReturnValue() );
于 2013-04-30T17:16:51.393 に答える