2009-11-30 17 views
7

Ho un file di dati con input e uscite previste. Un esempio potrebbe essere:Creare dinamicamente test PHPUnit dal file di dati

input: output: 
2  3 
3  5 
4  Exception 
5  8 
...  ... 

Attualmente ho una soluzione personalizzata per leggere dal file di dati ed eseguire un test per ogni {input, output} coppia. Vorrei convertirlo in una soluzione basata su PHPUnit e mi piacerebbe avere un test per input usando il nome del test perXassertY. Quindi i primi tre test verrebbero chiamati for2assert3(), for3assert5() e for4assertException().

Non voglio convertire i miei dati esistenti in test se è possibile creare i metodi di test in modo dinamico e mantenere il file di dati come base di questi test. Voglio convertirlo in PHPUnit perché voglio aggiungere altri test in seguito e anche elaborare e visualizzare l'output utilizzando Hudson.

Suggerimenti?

risposta

0

Bene, i file PHP sono solo file di testo, quindi è possibile scrivere uno script TestGenerator.php che leggerebbe nel file di dati e sputerebbe un sacco di file di test .php. Lo script di Test Generator sarebbe semplice come "leggere la riga, analizzarla, sputare il PHP". Quindi, esegui lo script del generatore di test come parte del processo di esecuzione di build/test e sei pronto a partire.

10

È possibile utilizzare PHPUnit di data providers per questo:

<?php 

require_once 'PHPUnit/Framework/TestCase.php'; 

class ProviderTest extends PHPUnit_Framework_TestCase 
{ 
    public function testCaseProvider() 
    { 
     // parse your data file however you want 
     $data = array(); 
     foreach (file('test_data.txt') as $line) { 
      $data[] = explode("\t", trim($line)); 
     } 

     return $data; 
    } 

    /** 
    * @dataProvider testCaseProvider 
    */ 
    public function testAddition($num1, $num2, $expectedResult) 
    { 
     $this->assertEquals($expectedResult, $num1 + $num2); 
    } 
} 

?> 

e il file test_data.txt simile a questa:

1 2 3 
2 2 4 
3 5 7 

quindi eseguire il test di:

$ phpunit ProviderTest.php 
PHPUnit 3.4.12 by Sebastian Bergmann. 

...F 

Time: 0 seconds, Memory: 5.75Mb 

There was 1 failure: 

1) ProviderTest::testAddition with data set #2 ('3', '5', '7') 
Failed asserting that two strings are equal. 
--- Expected 
+++ Actual 
@@ @@ 
-7 
+8 

/Users/dana/ProviderTest.php:23 

FAILURES! 
Tests: 4, Assertions: 3, Failures: 1.