2015-02-24 91 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