2009-11-30 9 views
7

Tengo un archivo de datos con entradas y salidas esperadas. Un ejemplo podría ser:Crear dinámicamente pruebas PHPUnit a partir del archivo de datos

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

Actualmente tengo una solución personalizada para leer desde el archivo de datos y realizar una prueba para cada {entrada, salida} par. Me gustaría convertir esto en una solución basada en PHPUnit y me gustaría tener una prueba por entrada usando el nombre de prueba para XassertY. Entonces las primeras tres pruebas se llamarían for2assert3(), for3assert5() y for4assertException().

No quiero convertir mis datos existentes a pruebas si es posible crear los métodos de prueba dinámicamente y mantener el archivo de datos como la base de estas pruebas. Quiero convertirlo a PHPUnit ya que quiero agregar algunas otras pruebas más tarde y también procesar y ver el resultado usando Hudson.

Sugerencias?

Respuesta

0

Bueno, los archivos PHP son solo archivos de texto, por lo que puede escribir un script TestGenerator.php que se leería en el archivo de datos y escupiría un montón de archivos de prueba .php. El script Test Generator sería tan simple como "leer la línea, analizarla, escupir el PHP". Luego, simplemente ejecute el script del generador de pruebas como parte de su proceso de compilación/prueba, y ya está listo.

10

Puede usar PHPUnit de data providers para esto:

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

?> 

y su archivo test_data.txt se ve algo como esto:

1 2 3 
2 2 4 
3 5 7 

A continuación, ejecute la prueba:

$ 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. 
Cuestiones relacionadas