mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Added facility to write self-registering test cases as methods
This commit is contained in:
		@@ -33,5 +33,25 @@ namespace
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
METHOD_AS_TEST_CASE( TestClass::succeedingCase, "succeeding/TestClass/succeedingCase", "A method based test run that succeeds" );
 | 
			
		||||
METHOD_AS_TEST_CASE( TestClass::failingCase, "failing/TestClass/failingCase", "A method based test run that fails" );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct Fixture
 | 
			
		||||
{
 | 
			
		||||
    Fixture() : m_a( 1 ) {}
 | 
			
		||||
    
 | 
			
		||||
    int m_a;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST_CASE_METHOD( Fixture, "succeeding/Fixture/succeedingCase", "A method based test run that succeeds" )
 | 
			
		||||
{   
 | 
			
		||||
    REQUIRE( m_a == 1 );        
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_CASE_METHOD( Fixture, "succeeding/Fixture/failingCase", "A method based test run that fails" )
 | 
			
		||||
{   
 | 
			
		||||
    REQUIRE( m_a == 2 );        
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -134,6 +134,9 @@ struct AutoReg
 | 
			
		||||
        TestRegistry::instance().registerTest( TestCaseInfo( new MethodTestCase<C>( method ), name, description ) );
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<typename T, size_t>
 | 
			
		||||
struct FixtureWrapper{};
 | 
			
		||||
    
 | 
			
		||||
} // end namespace Catch
 | 
			
		||||
 | 
			
		||||
@@ -145,4 +148,12 @@ struct AutoReg
 | 
			
		||||
#define CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \
 | 
			
		||||
    namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, Name, Desc ); }
 | 
			
		||||
 | 
			
		||||
#define TEST_CASE_METHOD( ClassName, TestName, Desc )\
 | 
			
		||||
    namespace Catch{ template<> struct FixtureWrapper<ClassName, __LINE__> : ClassName \
 | 
			
		||||
    { \
 | 
			
		||||
        void test(); \
 | 
			
		||||
    }; }\
 | 
			
		||||
    namespace { Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &Catch::FixtureWrapper<ClassName, __LINE__>::test, TestName, Desc ); } \
 | 
			
		||||
    void Catch::FixtureWrapper<ClassName, __LINE__>::test()
 | 
			
		||||
 | 
			
		||||
#endif // TWOBLUECUBES_CATCH_REGISTRY_HPP_INCLUDED
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user