forked from catchorg/Catch2
		
	
		
			
	
	
		
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								// 110-Fix-ClassFixture.cpp
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Catch has two ways to express fixtures:
							 | 
						||
| 
								 | 
							
								// - Sections
							 | 
						||
| 
								 | 
							
								// - Traditional class-based fixtures (this file)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// main() provided in 000-CatchMain.cpp
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "catch.hpp"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class DBConnection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    static DBConnection createConnection( std::string const & /*dbName*/ ) {
							 | 
						||
| 
								 | 
							
								        return DBConnection();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool executeSQL( std::string const & /*query*/, int const /*id*/, std::string const & arg ) {
							 | 
						||
| 
								 | 
							
								        if ( arg.length() == 0 ) {
							 | 
						||
| 
								 | 
							
								            throw std::logic_error("empty SQL query argument");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return true; // ok
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class UniqueTestsFixture
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    UniqueTestsFixture()
							 | 
						||
| 
								 | 
							
								    : conn( DBConnection::createConnection( "myDB" ) )
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int getID() {
							 | 
						||
| 
								 | 
							
								        return ++uniqueID;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    DBConnection conn;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    static int uniqueID;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int UniqueTestsFixture::uniqueID = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TEST_CASE_METHOD( UniqueTestsFixture, "Create Employee/No Name", "[create]" ) {
							 | 
						||
| 
								 | 
							
								    REQUIRE_THROWS( conn.executeSQL( "INSERT INTO employee (id, name) VALUES (?, ?)", getID(), "") );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TEST_CASE_METHOD( UniqueTestsFixture, "Create Employee/Normal", "[create]" ) {
							 | 
						||
| 
								 | 
							
								    REQUIRE( conn.executeSQL( "INSERT INTO employee (id, name) VALUES (?, ?)", getID(), "Joe Bloggs" ) );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Compile & run:
							 | 
						||
| 
								 | 
							
								// - g++ -std=c++11 -Wall -I$(CATCH_SINGLE_INCLUDE) -o 110-Fix-ClassFixture 110-Fix-ClassFixture.cpp 000-CatchMain.o && 110-Fix-ClassFixture --success
							 | 
						||
| 
								 | 
							
								// - cl -EHsc -I%CATCH_SINGLE_INCLUDE% 110-Fix-ClassFixture.cpp 000-CatchMain.obj && 110-Fix-ClassFixture --success
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Expected compact output (all assertions):
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// prompt> 110-Fix-ClassFixture.exe --reporter compact --success
							 | 
						||
| 
								 | 
							
								// 110-Fix-ClassFixture.cpp:47: passed: conn.executeSQL( "INSERT INTO employee (id, name) VALUES (?, ?)", getID(), "")
							 | 
						||
| 
								 | 
							
								// 110-Fix-ClassFixture.cpp:51: passed: conn.executeSQL( "INSERT INTO employee (id, name) VALUES (?, ?)", getID(), "Joe Bloggs" ) for: true
							 | 
						||
| 
								 | 
							
								// Passed both 2 test cases with 2 assertions.
							 |