2015-02-24 124 views
1

我在我的应用程序中使用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(而不是任何例外)。

我已经破解出一种测试方法如下,但不知道是否有一个简单的“1号线”的办法,将适合我的需求:

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(); 
    } 
} 

我没有信心,我也需要失败“的任何异常“被提出,因为测试运行者应该(?)拿起(例如测试失败)。按照同样的推理,将基本上以下是同样的测试:

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

    // act 
    const Foo foo(stub); 

    // assert 
    // no exception 
} 
+0

在两个“catch”块中,一个必然是多余的(因为他们也是这样做的)。无论如何,一种可能的选择是从“行为”功能返回发生事件的指标。使用测试框架检查返回值的相关方法。 – 2015-02-24 06:19:49

+0

我对Visual Studio的单元测试框架一无所知,但大多数单元测试框架将在测试方法出现异常时导致测试失败。 – immibis 2015-02-24 06:35:46

+0

@ Cheersandhth.-Alf - 如果函数返回void,是否有效声明函数指针是void指针? – camelCase 2015-02-24 06:54:56

回答

1

我用下面的测试方法表明,构造函数不抛出异常:当一个例外是

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

    // act 
    const Foo foo(stub); 

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

提出的测试自动失败。异常详细信息在失败消息中给出。

当没有异常提出时,测试将通过,因为我声称true == true