Получение проверяемого процедурного кода - кошмар, но возможен поэтапный подход. Учтите это:
// bar.php
$priceWithoutTax = 10;
$priceWithTax = 10 * $annoyingGlobalVarWithTaxRateInIt;
echo $priceWithTax;
Вы должны прицелиться в первую очередь, чтобы достичь:
//bar.php
echo Foo::getPriceWithTax($annoyingGlobalVarWithTaxRateInIt);
//Foo.php
class Foo {
public static function getPriceWithTax($annoyingGlobalVarWithTaxRateInIt) {
$priceWithoutTax = 10;
$priceWithTax = 10 * $annoyingGlobalVarWithTaxRateInIt;
return $priceWithTax;
}
}
//FooTest.php
public function testGetPriceWithTax() {
$expectedResult = 12;
$taxRate = 1.2;
$this->assertEquals($expectedResult, Foo::getPriceWithTax($taxRate));
}
Возможно, вы не хотите, чтобы код заканчивался , но прилипание основной части кода к статической функции здесь, по крайней мере, позволило нам получить реальную бизнес-логику (здесь тривиальный расчет) в стадии испытания.
Цель этого, предполагая, что ваш код иногда делает что-то более сложное, чем умножение на 10, состоит в том, чтобы обеспечить безопасный рефакторинг. Теперь вы можете вносить изменения в реализацию расчета (что для более сложной бизнес-логики, чем эта, вероятно, должно включать правильную ориентацию объекта ;-)), будучи уверенным в том, что ваши тесты сообщат вам, если Вы что-нибудь сломали.
В общем, вы всегда стремитесь к постепенному подходу к применению модульных тестов и рефакторингу. Получите часть своего кода до такой степени, чтобы его можно было тестировать с минимальными возможными изменениями в производственном коде, затем протестируйте его, затем проведите более интенсивный рефакторинг для той части, над которой вы работаете, затем перейдите к следующему биту.
Удачи.