Added facility to write self-registering test cases as methods

This commit is contained in:
Phil Nash 2010-12-27 20:51:06 +00:00
parent 7abc6365a9
commit a36b8d0779
2 changed files with 31 additions and 0 deletions

View File

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

View File

@ -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