C++ 如何在CPPFUnit中断言语句引发Excp1或Excp2类型的异常?

C++ 如何在CPPFUnit中断言语句引发Excp1或Excp2类型的异常?,c++,unit-testing,throw,cppunit,C++,Unit Testing,Throw,Cppunit,似乎不允许检查多种类型的异常,即可以引发多种异常的语句 对于e.x.表达式可能在一个平台上抛出Excp1,或在另一个平台上抛出Excp2。是否有一种变通方法可以使用CPPUNIT\u ASSERT\u THROW测试此类语句 在CPPFUnit中没有对该功能的直接支持,但您基本上有两种解决方案,可以在代码中轻松实现它 因此,此断言背后的基本思想是以下代码: bool expected_exception_thrown = false; try { yourExpression(); }

似乎不允许检查多种类型的异常,即可以引发多种异常的语句


对于e.x.表达式可能在一个平台上抛出Excp1,或在另一个平台上抛出Excp2。是否有一种变通方法可以使用CPPUNIT\u ASSERT\u THROW测试此类语句

在CPPFUnit中没有对该功能的直接支持,但您基本上有两种解决方案,可以在代码中轻松实现它

因此,此断言背后的基本思想是以下代码:

bool expected_exception_thrown = false;
try
{
    yourExpression();
}
catch(const ExpectedException&)
{
    expected_exception_thrown = true;
}
catch(...)
{
}

if (!expected_exception_thrown)
     CPPUNIT_FAIL();
当然,实际的实现有点花哨,还涉及一些额外的特性(比如对于意外的std::exception提供更好的消息,以及对错误消息缺少支持),但总体思路是相同的


因此,现在您可以轻松地扩展该模式,以支持所需数量的异常。您可以查看中的现有实现,或者使用该实现并对其进行扩展,或者使用我在上面发布的简化实现。

CPPFUnit中没有对该功能的直接支持,但您基本上有两种解决方案,可以在代码中轻松实现它

因此,此断言背后的基本思想是以下代码:

bool expected_exception_thrown = false;
try
{
    yourExpression();
}
catch(const ExpectedException&)
{
    expected_exception_thrown = true;
}
catch(...)
{
}

if (!expected_exception_thrown)
     CPPUNIT_FAIL();
当然,实际的实现有点花哨,还涉及一些额外的特性(比如对于意外的std::exception提供更好的消息,以及对错误消息缺少支持),但总体思路是相同的


因此,现在您可以轻松地扩展该模式,以支持所需数量的异常。您可以查看中的现有实现,或者使用该实现并对其进行扩展,或者使用我在上面发布的简化实现。

CPPFUnit中没有对该功能的直接支持,但您基本上有两种解决方案,可以在代码中轻松实现它

因此,此断言背后的基本思想是以下代码:

bool expected_exception_thrown = false;
try
{
    yourExpression();
}
catch(const ExpectedException&)
{
    expected_exception_thrown = true;
}
catch(...)
{
}

if (!expected_exception_thrown)
     CPPUNIT_FAIL();
当然,实际的实现有点花哨,还涉及一些额外的特性(比如对于意外的std::exception提供更好的消息,以及对错误消息缺少支持),但总体思路是相同的


因此,现在您可以轻松地扩展该模式,以支持所需数量的异常。您可以查看中的现有实现,或者使用该实现并对其进行扩展,或者使用我在上面发布的简化实现。

CPPFUnit中没有对该功能的直接支持,但您基本上有两种解决方案,可以在代码中轻松实现它

因此,此断言背后的基本思想是以下代码:

bool expected_exception_thrown = false;
try
{
    yourExpression();
}
catch(const ExpectedException&)
{
    expected_exception_thrown = true;
}
catch(...)
{
}

if (!expected_exception_thrown)
     CPPUNIT_FAIL();
当然,实际的实现有点花哨,还涉及一些额外的特性(比如对于意外的std::exception提供更好的消息,以及对错误消息缺少支持),但总体思路是相同的

因此,现在您可以轻松地扩展该模式,以支持所需数量的异常。您可以查看中的现有实现,或者使用该实现并扩展它,或者使用我在上面发布的简化实现。

第一个测试,您设置测试条件,使其抛出exeption 1。 如果它没有抛出,那就是测试失败。 如果它确实抛出,您将其作为异常1捕获,并将其作为传递接受。 如果它抛出其他东西,框架将捕获它

第二个测试是,使用条件编译只为平台2启用代码。您设置测试条件,使其抛出异常2。 如果它没有抛出,那就是测试失败。 如果它确实抛出,您将其捕获为异常2,并将其接受为通过。 如果它抛出其他东西,框架将捕获它

在第一个平台上,测试简单地通过了,因为它无需做任何事情。 在第二个平台上,您可以按预期捕获异常2。

第一个测试,您设置测试条件,使其抛出exeption 1。 如果它没有抛出,那就是测试失败。 如果它确实抛出,您将其作为异常1捕获,并将其作为传递接受。 如果它抛出其他东西,框架将捕获它

第二个测试是,使用条件编译只为平台2启用代码。您设置测试条件,使其抛出异常2。 如果它没有抛出,那就是测试失败。 如果它确实抛出,您将其捕获为异常2,并将其接受为通过。 如果它抛出其他东西,框架将捕获它

在第一个平台上,测试简单地通过了,因为它无需做任何事情。 在第二个平台上,您可以按预期捕获异常2。

第一个测试,您设置测试条件,使其抛出exeption 1。 如果它没有抛出,那就是测试失败。 如果它确实抛出,您将其作为异常1捕获,并将其作为传递接受。 如果它抛出其他东西,框架将捕获它

第二个测试是,使用条件编译只为平台2启用代码。您设置测试条件,使其抛出异常2。 如果它没有抛出,那就是测试失败。 如果它确实抛出,您将其捕获为异常2,并将其接受为通过。 如果它抛出其他东西,框架将捕获它

在第一个平台上,测试简单地通过了,因为它无需做任何事情。 在第二个平台上,您可以按预期捕获异常2。

第一个测试,您设置测试条件,使其抛出exeption 1。 如果它没有抛出,那就是测试失败。 如果它确实抛出,您将其作为异常1捕获,并将其作为传递接受。 如果它抛出其他东西,框架将捕获它

第二个测试是,使用条件编译只为平台2启用代码。您设置测试条件,使其抛出异常2。 如果它没有抛出,那就是测试失败。 如果它确实抛出,您将其捕获为异常2,并将其接受为通过。 如果它抛出其他东西,框架将捕获它

在第一个平台上,测试简单地通过,如t