2013-09-12 3 views
7

Возможно ли проверить сообщение, отправленное с помощью исключения? В настоящее время можно сделать:Проверка сообщений об исключениях с помощью GoogleTest

ASSERT_THROW(statement, exception_type) 

, который все прекрасно и хорошо, но не где я могу найти способ проверить e.what() это действительно то, что я ищу. Это невозможно с помощью теста Google?

+1

Вы можете не поместить в 'gtest' утверждение макроса в' catch' блок? –

+0

@ A.E.Drew О чем ты говоришь? Где я упомянул что-нибудь о размещении какого-либо макроса в блоке catch? Пожалуйста, не комментируйте ради комментариев – ForeverLearning

+1

Существует полный ответ: http://stackoverflow.com/questions/23270078/test-a-specific-exception-type-is-thrown-and-the-exception -has-the-right-propert –

ответ

2

Что-то вроде следующего будет работать. Просто поймать исключение каким-то образом, а затем сделать EXPECT_STREQ на what() вызова:

#include "gtest/gtest.h" 

#include <exception> 

class myexception: public std::exception 
{ 
    virtual const char* what() const throw() 
    { 
    return "My exception happened"; 
    } 
} myex; 


TEST(except, what) 
{ 
    try { 
    throw myex; 
    } catch (std::exception& ex) { 
     EXPECT_STREQ("My exception happened", ex.what()); 
    } 

} 

int main(int argc, char **argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 
+0

Хотя я очень ценю ваш ответ, я знал, как делать это другими способами (и делали это какое-то время). Я просто хотел узнать, не хватает ли какого-либо расширения макросу ASSERT_THROW, который позволяет мне проверить e.what() внутри самого макроса. Я тоже не хотел писать обработчики try/catch. – ForeverLearning

+5

Это плохой подход. Он не пытается проверить, генерируется ли исключение, оно проверяет только правильное сообщение _if_, генерируется исключение. –

+0

@ Mr.Boy так что такое хороший подход? Можете ли вы проверить, что он брошен, а также сообщение - это то, что ожидается? Многие пути ошибок могут вызывать 'runtime_error', как я могу проверить, что определенная ошибка времени выполнения выбрасывается без изменения кода только для тестов? – dashesy

Смежные вопросы