Насмешка над методом с помощью спецификатора throw () - PullRequest
7 голосов
/ 07 февраля 2011

Я пытаюсь гуглить виртуальный метод, который имеет спецификатор 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 ()?

Ответы [ 3 ]

2 голосов
/ 27 февраля 2011

Из того, что я могу сказать, вам нужно использовать "внутренний" макрос GMOCK_METHOD0_ и использовать:

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

как MOCK_CONST_METHOD0(m, F) равно #defineed для GMOCK_METHOD0_(, const, , m, F), gmock / gmock-генерируемого-функции-mockers.h # 644 и gmock / gmock-генерированного-функции-mockers.h # 347 определяет это.

1 голос
/ 30 апреля 2013

Google mock не поддерживает спецификации исключений. Причина заключается в том, что они считают, что спецификация исключений является в основном ошибочной, и ее следует избегать на практике, даже если вы широко использовать исключения.

Есть несколько источников, поддерживающих эту точку зрения:

Решением было бы переписать код следующим образом:

virtual ReturnValue FunctionName() const throw();

и затем используйте:

MOCK_CONST_METHOD0( FunctionName, ReturnValue() );
1 голос
/ 02 марта 2011

Мое решение: создать реализацию виртуальной функции, которая состоит исключительно из перехода к моделирующему методу.

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

Затем, когда вам нужно написать Expect_Call или сделать что-нибудь для этого метода, простообратитесь к MockFunctionName.

...