Próbuję dodać niestandardowy dochodzić phpunit po this tutorial, aby potwierdzić liczbami zespolonymi zwracane jako ciąg znaków (npphpunit zwyczaj twierdzi potrzebna pomoc
„-123 + 456i”
według metody, którą testuję) do określonej precyzji zarówno dla komponentów rzeczywistych, jak i urojonych. Włożyłam klasę Complex.php do analizowania ciąg do rzeczywistych i urojonych części i złożyć następujące klasy Twierdzenie 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);
}
}
}
Mój skrypt testów jednostkowych:
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');
}
}
Testy jednostkowe działały bezbłędnie (ale nie powiodło się), gdy po prostu wykonywałem assertEquals ... ale teraz dodałem opcję include i zmieniono ją na moje nowe twierdzenie, to się zawiesza, twierdząc, że nie może wywołać niezdefiniowanej metody assertComplexEquals ().
Czy ktokolwiek osiągnął sukces rozszerzając phpunit o niestandardowe twierdzenia i może zobaczyć, co robię źle?
Mogłabyś lepiej śledzić oficjalne http://www.phpunit.de/manual/current/en/extending-phpunit.html#extending-phpunit.custom-assertions – zerkms
Niezwiązane z tym problemem, możesz użyć '__DIR__' (PHP 5.3 +) lub 'dirname (__ FILE __)' zamiast de oczekuje na bieżący katalog roboczy, który może ulec zmianie podczas działania programu. –
@ David Harkness: Założę się, że w jego przypadku 'getcwd()! = __DIR__' – zerkms