estoy tratando de agregar una aserción costumbre de PHPUnit, siguiendo this tutorial, para validar los números complejos devueltos como una cadena (por ejemploencargo PHPUnit afirma necesitaba ayuda
"-123 + 456i"
por el método que estoy probando) con una precisión definida para los componentes tanto reales como imaginarios. He puesto una clase Complex.php analizar la cadena en las partes real e imaginaria, y poner juntos la siguiente afirmación de la clase como complexAssert.php:
require_once 'PHPUnit/Framework/Assert.php';
include_once getcwd().'/custom/Complex.php';
class complexAssert extends PHPUnit_Framework_Assert {
public function assertComplexEquals($expected, $actual, $message = '', $delta = 0)
{
$expectedComplex = new Complex($expected);
$actualComplex = new Complex($actual);
if (!($actualComplex->getReal() >= ($expectedComplex - $delta) &&
$actualComplex->getReal() <= ($expectedComplex + $delta))) {
return $this->fail($message);
}
if (!($actualComplex->getImaginary() >= ($expectedComplex - $delta) &&
$actualComplex->getImaginary() <= ($expectedComplex + $delta))) {
return $this->fail($message);
}
}
}
Mi script de prueba de unidad:
require_once getcwd().'/custom/complexAssert.php';
require_once 'testDataFileIterator.php';
class EngineeringTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider providerIMSUM
*/
public function testIMSUM()
{
$args = func_get_args();
$expectedResult = array_pop($args);
$result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMSUM'),$args);
$this->assertComplexEquals($expectedResult, $result);
}
public function providerIMSUM()
{
return new testDataFileIterator('rawTestData/Calculation/Engineering/IMSUM.data');
}
}
Las pruebas unitarias funcionaron sin error (pero fallaron) cuando simplemente estaba haciendo un assertEquals ... pero ahora he agregado el include y cambiado a mi nueva afirmación, se está bloqueando al afirmar que no puede llamar al método undefined assertComplexEquals ()
¿Alguien ha tenido éxito al extender phpunit con afirmaciones personalizadas, y puede ver lo que estoy haciendo mal?
Usted podría mejor seguir el oficial http://www.phpunit.de/manual/current/en/extending-phpunit.html#extending-phpunit.custom-assertions – zerkms
Si bien no está relacionado con este problema, es posible que desee utilizar '__DIR__' (PHP 5.3 +) o 'dirname (__ FILE __)' en lugar de de pendiente en el directorio de trabajo actual que puede cambiar mientras se ejecuta el programa. –
@David Harkness: Apuesto a que en su caso 'getcwd()! = __DIR__' – zerkms