2014-02-19 3 views
3

Я хочу, чтобы иметь возможность сохранять данные на диск в случае, если тест завершился неудачно. Есть ли способ сделать это в рамках googletest?googletest: выполнение дополнительной операции, если сбой теста

TEST_F(test_similarity,are_similar) { 

    ASSERT_GT(1e-10,norm(im0,im1)); 

    // If test fails save images to disk for comparison: 
    imwrite("im0.png",im0); 
    imwrite("im1.png",im1); 
} 

ответ

4

Есть в Test::HasFailure(), Test::HasNonfatalFailure() и Test::HasFatalFailure() функции, которые возвращают true если была (фатальный/нефатальный) недостаточность. Вы можете использовать их для проверки.

TEST_F(test_similarity,are_similar) { 

    EXPECT_GT(1e-10,norm(im0,im1)); // Note the change to EXPECT 

    // If test fails save images to disk for comparison: 
    if(HasFailure()) { // if not in a TEST, use ::testing::Test::HasFailure() 
    imwrite("im0.png",im0); 
    imwrite("im1.png",im1); 
    FAIL(); //We want to fail fatally; use ADD_FAILURE() to fail non-fatally 
    } 
} 

См https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#checking-for-failures-in-the-current-test для деталей.

+2

Почти! 'ASSERT_GT()' выдает запрос перед тем, как вызовы 'imwrite()' имеют шанс. Замените «EXPECT_GT()» и выпустите тестовый пример, используя явную инструкцию 'FAILURE()'. –

+0

Правда. Я изменил его в своем ответе. – hildensia

+0

Добавьте также упомянутый оператор 'FAILURE()', чтобы сохранить исходное поведение тестовых случаев. –

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