Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CPPFUnit_断言_断言失败时析构函数中的消息崩溃_C++_Visual Studio 2008_Compiler Errors_Cppunit - Fatal编程技术网

C++ CPPFUnit_断言_断言失败时析构函数中的消息崩溃

C++ CPPFUnit_断言_断言失败时析构函数中的消息崩溃,c++,visual-studio-2008,compiler-errors,cppunit,C++,Visual Studio 2008,Compiler Errors,Cppunit,代码片段的相关部分。上述代码段导致Win VC 8编译器在退出时生成以下错误。在析构函数中传递断言可以修复崩溃。此错误仅在windows中观察到,在linux中工作正常 class BasicMathTest: public TestFixture { CPPUNIT_TEST_SUITE(BasicMathTest); CPPUNIT_TEST(testAdd); CPPUNIT_TEST(testMultiply); CPPUNIT_TEST(testDivi

代码片段的相关部分。上述代码段导致Win VC 8编译器在退出时生成以下错误。在析构函数中传递断言可以修复崩溃。此错误仅在windows中观察到,在linux中工作正常

class BasicMathTest: public TestFixture
{
    CPPUNIT_TEST_SUITE(BasicMathTest);
    CPPUNIT_TEST(testAdd);
    CPPUNIT_TEST(testMultiply);
    CPPUNIT_TEST(testDivide);
    CPPUNIT_TEST_SUITE_END();

    class A
    {
        public:
            ~A()
            {
                CPPUNIT_ASSERT_MESSAGE( "BasicMath::Addition", 0 );
            }

    };

    A ob;

    public:
    virtual void setUp( void );
    virtual void tearDown( void );

    void testAdd( void );
    void testMultiply( void );
    void testDivide( void );

    private:
    BasicMath *obj;
};

int main()
{
   TestRunner testrunner;

   Test *tests = TestFactoryRegistry::getRegistry().makeTest();
   testrunner.addTest( tests );
   testrunner.run( m_testResult );
   m_outputter->write();
   return !m_collector.wasSuccessful();
}

TestFixture的构造函数和析构函数不受异常保护。如果您想在此阶段使用断言,您需要更改代码,以便可以将使用断言的代码移动到setUp/tearDown中,从而抛出异常

实际上,它甚至可能不会以未处理的异常终止,而是崩溃,因为在解除堆栈时可能会出现第二个异常。为了分离不同测试的状态,测试夹具被包装到一个函子中,每个测试都会得到一个存储在向量中的新实例。这再一次说明,在析构函数中抛出异常几乎总是一个坏主意