如何声明没有引发异常?

时间:2015-02-24 05:31:32

标签: c++ windows unit-testing exception visual-studio-2013

我正在将Visual Studio 2013中的单元测试功能用于我的应用程序。

我正在尝试为一个类编写测试,您可以将特定对象传递给构造函数,并且根据传递的对象的状态,可能会抛出异常。

我为每个对象状态编写了存根,并为构造函数将抛出异常的场景编写了测试用例,如下所示:

TEST_METHOD(constructor_ExceptionRaised)
{
    // arrange
    const InvalidStub stub;

    // act
    auto act = [stub] { const Foo foo(stub); };

    // assert
    Microsoft::VisualStudio::CppUnitTestFramework::Assert::ExpectException
        <MyException>(act);
}

我应该如何处理我想要传递有效存根并简单断言没有引发异常的情况?我想纯粹关注一个特定的MyException没有被抛出(而不是任何例外)。

我已经将以下测试方法混合在一起但不确定是否存在简单的&#34; 1行&#34;方法符合我的需要:

TEST_METHOD(constructor_NoException)
{
    // arrange
    const ValidStub stub;

    try
    {
        // act
        const Foo foo(stub);
    }

    // assert
    catch (MyException e)
    {
        Microsoft::VisualStudio::CppUnitTestFramework::Assert::Fail();
    }
    catch (...)
    {
        Microsoft::VisualStudio::CppUnitTestFramework::Assert::Fail();
    }
}

我不自信我也需要失败&#34;任何例外&#34;被提升,因为这应该由测试运动员选择(?)(即测试失败)。同样的推理,以下基本上是相同的测试:

TEST_METHOD(constructor_NoException)
{
    // arrange
    const ValidStub stub;

    // act
    const Foo foo(stub);

    // assert
    // no exception
}

1 个答案:

答案 0 :(得分:1)

我使用以下测试方法来表明构造函数不会抛出异常:

TEST_METHOD(constructor_NoException)
{
    // arrange
    const ValidStub stub;

    // act
    const Foo foo(stub);

    // assert
    Microsoft::VisualStudio::CppUnitTestFramework::Assert::IsTrue(true);
}

当引发异常时,测试会自动失败。故障消息中给出了异常详细信息。

当没有引发异常时,测试将通过,因为我声明true == true