Я пытаюсь добавить пользовательское утверждение в phpunit, следуя этому руководству , чтобы проверить комплексные числа, возвращаемые в виде строки (например,
"- 123 + 456i"
по методу, который я тестирую) с определенной точностью как для реальных, так и для мнимых компонентов. Я поместил класс Complex.php для разбора строки на действительную и мнимую части и собрал следующий класс утверждения как 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);
}
}
}
Мой скрипт юнит-теста:
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');
}
}
Юнит-тесты работали без ошибок (но не сработали), когда я просто выполнял assertEquals ... но теперь я добавил include и изменил свой новый assert, он вылетает, утверждая, что не может вызвать неопределенный метод assertComplexEquals ().
Кто-нибудь имел успех в расширении phpunit с помощью пользовательских утверждений и может понять, что я делаю неправильно?