我写了一个Decimal
库来执行大十进制数的计算。该库依赖于Calculator
接口,该接口目前有3个实现:
GmpCalculator
使用GMP扩展程序; BcMathCalculator
使用BC Math扩展程序; NativeCalculator
当上述任何一个都不可用时,在PHP中本地执行计算。我的测试套件测试Decimal
类本身,无论使用的Calculator
实现如何:
class DecimalTest extends PHPUnit_Framework_TestCase
{
public function testPlus() { ... }
public function testMinus() { ... }
public function testMultipliedBy() { ... }
public function testDividedBy() { ... }
}
我想运行整个测试套件3次,每次通过在测试套件运行之前运行单行代码来更改Calculator
实现。
这可以通过PHPUnit实现吗?
请注意,这是@dataProvider
的一个用例,因为我不想用数据提供程序注释每个测试方法,只是为了测试所有实现,而且我已经在我的测试套件中使用了数据提供程序,所以这甚至都不可能。
答案 0 :(得分:0)
选项1:
制作DecimalTest摘要,然后为需要测试的每种类型的Calcultator实施具体测试。在每个测试中,我将更改setUp方法,以便使用不同的Calculator实现:
abstract class DecimalTest extends PHPUnit_Framework_TestCase
{
public final function testPlus() { ... }
public final function testMinus() { ... }
public final function testMultipliedBy() { ... }
public final function testDividedBy() { ... }
}
// define a class for each Calculator type
class GmpCalculatorDecimalTest extends DecimalTest
{
public function setUp()
{
$this->calculator = new GmpCalculator();
}
}
选项2:
您还可以定义环境变量以设置将使用的Calculator实现:
class DecimalTest extends PHPUnit_Framework_TestCase
{
public function setUp()
{
$calculator_class = getenv('CALC_IMPL') ? getenv('CALC_IMPL') : 'GmpCalculator';
$this->calculator = new $calculator_class();
}
}
在执行phpunit之前设置变量:
导出CALC_IMPL = NativeCalculator phpunit
我觉得第一种选择更好。