2011-02-07 12 views
7

Próbuję Google kpić z wirtualnej metody, która ma specyfikator throw(). Oryginalny funkcja wygląda tak:Kpiny z metody ze specyfikatorem throw()

virtual ReturnValue FunctionName() const throw(); 

otrzymuję błąd kompilatora: looser throw specifier for 'virtual FunctionSignature'

Oto kod próbowałem dotąd:

MOCK_CONST_METHOD0(FunctionName, ReturnValue()); 
MOCK_CONST_METHOD0(FunctionName, ReturnValue() throw()); 
MOCK_CONST_METHOD0(FunctionName, ReturnValue()) throw(); // Gives a different error entirely. 

Próbowałem prawie każdy inne kombinacje, które mogę wymyślić, ale są to te, które wydają się najbardziej logiczne. Jak mam oszukać Google metodą metodę ze specyfikatorem throw()?

+0

Wydaje mi się, że Google styl kodowania zabrania wyjątki całkowicie. –

+0

@Alexandre C: Sądzę, że jedno pytanie brzmi, czy GoogleMock został zaprojektowany do obsługi kodu nie napisanego w stylu domu Google'a? –

+1

@Steve: Domyślam się, że nie (jeszcze t), ale nie lubię zgadywać. –

Odpowiedz

1

Moje rozwiązanie: utwórz implementację funkcji wirtualnej polegającej wyłącznie na przejściu do wyśmiewanej metody.

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

Wtedy, gdy trzeba napisać Expect_Call lub zrobić coś dla tej metody, po prostu patrz MockFunctionName.

+0

OK, a może EXPECT_THROW – lolsborn

1

Próba Google nie obsługuje specyfikacji wyjątków. Powodem jest to, że uważają, że specyfikacja wyjątków jest w większości wadą i należy jej unikać w praktyce, nawet jeśli użytkownik intensywnie korzysta z wyjątków.

Istnieje kilka źródeł, które obsługuje ten punkt widzenia:

Rozwiązaniem byłoby przepisanie kodu jako:

virtual ReturnValue FunctionName() const throw(); 

a następnie użyć:

MOCK_CONST_METHOD0(FunctionName, ReturnValue());