0
J'utilise Catch pour écrire des tests unitaires et j'ai rencontré un problème où mon test échoue car une exception est levée, même si j'utilise REQUIRE_THROWS_AS
. Ceci est mon test:Catch not catching exception
SECTION("Get column index for inexistent name") {
REQUIRE_THROWS_AS(result->column_index("inexistent"), std::out_of_range);
}
Et c'est l'exception que je reçois sur ma console:
$ tests/unit_tests "Test Result"
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: Name not found.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
unit_tests is a Catch v1.5.8 host application.
Run with -? for options
-------------------------------------------------------------------------------
Test Result
Query empty table
Get column index for inexistent name
-------------------------------------------------------------------------------
<path to file>:22
...............................................................................
<path to file>:46: FAILED:
due to a fatal error condition:
SIGABRT - Abort (abnormal termination) signal
===============================================================================
test cases: 1 | 1 failed
assertions: 8 | 7 passed | 1 failed
Si je comprends Catch cette exception est exactement ce que je suis en train de prendre à droite?
Je ne sais pas Catch, il semble que l'exception soit levée avant que 'REQUIRE_THROWS_AS' n'obtienne une chance de faire quoi que ce soit. Vous avez probablement besoin de quelque chose comme 'REQUIRE_THROWS_AS (résultat-> column_index," inexistant ", std :: out_of_range);' donc 'REQUIRE_THROWS_AS' a une chance de faire un bloc try-catch pour vous. – nwp
Avez-vous essayé de passer le test? Comme nwp l'a dit, cela prouvera si votre exception est lancée là où vous pensez qu'elle est lancée – UKMonkey
Il semble que vous ayez intercepté l'exception non à l'endroit pointé, Essayez temporairement de remplacer la macro avec try {} catch() {} catch (...) {} et le déboguer. –