J'écris des tests unitaires pour une application. J'ai quelques exceptions dans un constructeur, donc je l'ai écrit ceci:Problème C++ 11 avec GTest
TEST(Tablier, ConstructeurParamInvalide2)
{
ASSERT_THROW(Tablier t_tablier{10, 65} , PreconditionException);
}
Quand j'écris ceci, il semble que le ASSERT_THROW macro est pas satisfait et le test échoue. Voici l'expansion macro:
switch (0) case 0: default: \
if (::testing::internal::ConstCharPtr gtest_msg = "") { \
bool gtest_caught_expected = false; \
try { \
if (::testing::internal::AlwaysTrue()) { Tablier t_tablier{10; }; \
} \
catch (65} const&) { \
gtest_caught_expected = true; \
} \
catch (...) { \
gtest_msg.value = \
"Expected: " "Tablier t_tablier{10" " throws an exception of type " \
"65}" ".\n Actual: it throws a different type."; \
goto gtest_label_testthrow_76; \
} \
if (!gtest_caught_expected) { \
gtest_msg.value = \
"Expected: " "Tablier t_tablier{10" " throws an exception of type " \
"65}" ".\n Actual: it throws nothing."; \
goto gtest_label_testthrow_76; \
} \
} else \
gtest_label_testthrow_76: \
return ::testing::internal::AssertHelper(::testing::TestPartResult::kFatalFailure, "/home/eric/Programming/cpp/Puissance4/pxTestsUnitaires/tests/test_Tablier.cpp", 76, gtest_msg.value) \
= ::testing::Message()
Notez que le Tablier t_tablier{10; };
Au lieu de cela, si j'écris ceci:
TEST(Tablier, ConstructeurParamInvalide2)
{
ASSERT_THROW(Tablier t_tablier(10, 65) , PreconditionException);
}
La macro fonctionne très bien et le test passe. Mon projet et compilateur sont configurés pour C++ 11, et de nombreux autres tests passent en utilisant la syntaxe C++ 11. Une idée de ce qui pourrait être le problème?
Cordialement
double possible de [Passer une liste d'initialisation à une macro] (http://stackoverflow.com/questions/30372148/passing-an-initialization-list-to-a-macro) – neuront