我正在尝试向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来自定义assert,并且能看出我的错误在哪里?
__DIR__
(PHP 5.3+)或dirname(__FILE__)
而不是依赖于在程序运行时可以更改的当前工作目录。 - David Harknessgetcwd() != __DIR__
。 - zerkmsgetcwd()
的危险在于它可能会因环境(测试与生产)而改变,然而包含其他模块通常需要在任何活动环境下工作。最好依赖于当前脚本的位置或包含路径与自动加载。 - David Harkness