UnitTesting - phpUnit bricht nach erstem Fail ab

MikeNukem

Grünschnabel
Guten Morgen Deutschland.....

arbeite mich seit ein paar Tagen in test getriebener php Entwicklung ein und phpUnit schien mir das Beste (weil scheinbar das Einzige).

Nun bricht phpUnit aber immer nach dem ersten Fail ab... Und ich finde keine Möglichkeit meine unit tests trotz fails weiter laufen zu lassen.

klasse 1:
Code:
<?php

	class ConfigReader
	{
		private $cConfigFile;
		
		public function ConfigReader()
		{
			$this->inititialize();
			$this->loadConfiguration();
		}
		
		private function inititialize()
		{
			$this->cConfigFile = null;
		}
		
		private function loadConfiguration()
		{} 
		
	}
	
?>

dazu die TestKlasse im gleichen Ordner
Code:
<?php

	require_once 'C:\xampp\php\pear\PHPUnit\Framework\TestCase.php';
	require_once 'ConfigReader.php';

	class ConfigReaderTest extends PHPUnit_Framework_TestCase	
	{
		
		private $cTestObject;
		
		protected function setUp()
		{
			$this->cTestObject = new ConfigReader();
			if( isset( $_SERVER['HOSTNAME'] ) )
				$_SERVER['HOSTNAME'] = "UnitTest";
			else if( isset( $_SERVER['HTTP_HOST'] ) )
				$_SERVER['HTTP_HOST'] = "UnitTest";
		}
		 
		protected function tearDown()
		{
			unset($this->cTestObject);
		}
		
		public function testObjectInitialisation()
		{
			$reflection_class = new ReflectionClass("ConfigReader");
			$property = $reflection_class->getProperty("cConfigFile");
			$property->setAccessible(true);
			$this->assertNull($property->getValue(new ConfigReader()), "test is not initialized");
		}
	}
	
?>

meine 2. Klasse:
Code:
<?php

	class DataBaseConnector
	{
		
		private $cConfiguration;
		
		public function DataBaseConnector()
		{
			$this->initialize();			
		}
		
		private function initialize()
		{
			$this->cConfiguration=null;
		}
		
		public function getDataFetchedAssoc($aQuery=null)
		{
			if(!empty($aQuery))
				return true;
			else
				return null;
		}
		
		public function getDataFetchedObject()
		{
			if(!empty($aQuery))
				return true;
			else
				return null;
		}
	}


?>

und der dazugehörige testCase:
Code:
<?php

	require_once 'C:\xampp\php\pear\PHPUnit\Framework\TestCase.php';
	require_once 'DataBaseConnector.php';

	class DataBaseConnectorTest extends PHPUnit_Framework_TestCase
	{
		private $cTestObject;
		
		protected function setUp() 
		{
			$this->cTestObject = new DataBaseConnector();
			if( isset( $_SERVER['HOSTNAME'] ) )
				$_SERVER['HOSTNAME'] = "UnitTest";
			else if( isset( $_SERVER['HTTP_HOST'] ) )
				$_SERVER['HTTP_HOST'] = "UnitTest";			
	    }
	    
	    protected function tearDown()
	    {
	    	unset($this->cTestObject);
	    }
	    
	    public function testObjectInitialisation()
		{
			$reflection_class = new ReflectionClass("DataBaseConnector");
			$property = $reflection_class->getProperty("cConfiguration");
			$property->setAccessible(true);			
			$this->assertNull($property->getValue(new DataBaseConnector()), "test is not initialized");
		}
		
		public function testConnectToDatabase()
		{}
		
		public function testMethodGetDataFetchedAsAssoc()
		{
			$this->assertNull( $this->cTestObject->getDataFetchedAssoc() );
			$this->assertNull( $this->cTestObject->getDataFetchedAssoc('') );
			$this->assertNull( $this->cTestObject->getDataFetchedAssoc("") );
			$this->assertNull( $this->cTestObject->getDataFetchedAssoc(" ") );
			$this->assertNull( $this->cTestObject->getDataFetchedAssoc("123") );
			$this->assertNull( $this->cTestObject->getDataFetchedAssoc('123') );
			$this->assertNull( $this->cTestObject->getDataFetchedAssoc(123) );
		}
		
		public function testMethodGetDataFetchedAsObject()
		{
			$this->assertNull( $this->cTestObject->getDataFetchedObject() );
			$this->assertNull( $this->cTestObject->getDataFetchedObject('') );
			$this->assertNull( $this->cTestObject->getDataFetchedObject("") );
			$this->assertNull( $this->cTestObject->getDataFetchedObject(" ") );
			$this->assertNull( $this->cTestObject->getDataFetchedObject("123") );
			$this->assertNull( $this->cTestObject->getDataFetchedObject('123') );
			$this->assertNull( $this->cTestObject->getDataFetchedObject(123) );
		}
	}


?>

Die Methoden des DataBaseConnectors testMethodGetDataFetchedAsAssoc und testMethodGetDataFetchedAsObject würden nun je 4 unererwartete Ergebnisse auf ein assertNull bekommen, da sie definitiv kein NULL zurückgeben, wenn der übergebene Wert nicht "leer" ist. Aber phpUNIT bricht immer nach dem ersten FAIL ab.

Hier meine phpunit.xml welche ich über die Console aufrufe.
Code:
<?xml version="1.0" encoding="UTF-8"?>

<phpunit backupGlobals="true"
	backupStaticAttributes="false"	
	cacheTokens="false"
	colors="false"
	convertErrorsToExceptions="true"
	convertNoticesToExceptions="true"
	convertWarningsToExceptions="true"
	forceCoversAnnotation="false"
	mapTestClassNameToCoveredClassName="false"
	printerClass="PHPUnit_TextUI_ResultPrinter"         
	processIsolation="false"
	stopOnError="false"
	stopOnFailure="false"
	stopOnIncomplete="false"
	stopOnSkipped="false"
	testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"         
	strict="false"
	verbose="false">
	
	<testsuites>

		<testsuite name="My Test Suites">
			<directory>classRoom/MainClasses/</directory>			
		</testsuite>
	
	</testsuites>
	
	<logging>
	  <log type="coverage-html" target="D:\xWebServer\xAamppRooT\projects\TestedScrptCollectionTest\report" charset="UTF-8"
	       yui="true" highlight="false"
	       lowUpperBound="35" highLowerBound="70"/>
	  <log type="coverage-xml" target="D:\xWebServer\xAamppRooT\projects\TestedScrptCollectionTest\coverage.xml"/>
	  <log type="json" target="D:\xWebServer\xAamppRooT\projects\TestedScrptCollectionTest\logfile.json"/>
	  <log type="tap" target="D:\xWebServer\xAamppRooT\projects\TestedScrptCollectionTest\logfile.tap"/>
	  <log type="junit" target="D:\xWebServer\xAamppRooT\projects\TestedScrptCollectionTest\logfile.xml" logIncompleteSkipped="false"/>
	  <log type="testdox-html" target="D:\xWebServer\xAamppRooT\projects\TestedScrptCollectionTest\testdox.html"/>
	  <log type="testdox-text" target="D:\xWebServer\xAamppRooT\projects\TestedScrptCollectionTest\testdox.txt"/>
	</logging>
	
</phpunit>

Wo beschreibe ich nun das die Tests weiter laufen sollen, auch wenn es irgendwo ein Fail gibt.

Weitere Fragen:
1) wie kann ich in der phpunit.xml dafür sorgen das phpunit in einen ordner mit einem time-stamp als namen logged?
2) wie kann ich in der phpunit.xml dafür sorgen das am Ende noch ein php datei ausgeführt wird (um eventuell die Ergebnisse als ZIP zu packen und an einen Server weiter zu reichen der dieses Ergebnis analyisert)
3) kann ich über die phpunit.xml dafür sorgen das fehlende testCases angelegt werden?

Fürs erste hoffe ich das reicht als Info...

Bis denne
Euer MikeNukem

ps.: Ja ich habe Bücher zum Thema PHP, Nein ich fand kein gutes zum Theme phpUnit! Und ja ich habe gegoogelt, darüber bin ich ja hier gelandet.
 
Zurück