рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрд▓рд╕реА рд╣реИрдВред рдФрд░ рд╣рд░ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред
рддреЛ рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрдИ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдереЗ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдФрд░ рдЖрдЧреЗ ... рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдПрдХ рд╕рдЦреНрдд рдЕрдиреБрдХреНрд░рдо рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди, рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рджреЗрдЦреЗрдВ ...
рд╢рд░реНрдд рд▓рдЧрд╛рдирд╛
рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХ рдкрд╣рд▓реВ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрд╢реНрд░рд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрд╡рддрдВрддреНрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВред рдЖрд╢реНрд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдФрд░ рдХрднреА-рдХрднреА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ)ред рдЗрд╕рд▓рд┐рдП, рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдЪреВрдБрдХрд┐ рдЙрди рд╕рднреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЖрдкрдХреЛ рддрджрдиреБрд╕рд╛рд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред PHPUnit рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рд╢рд░реНрддреЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдереАрдВред
рд╢рд░реНрдд
рдЗрд╕рд▓рд┐рдП, рдЕрдм рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрдорд╛рдЯрд░ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ PHPUnit рдкрд░
рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ ред рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦрдХ рдиреЗ рдЦреБрдж рд▓рд┐рдЦрд╛ рд╣реИ, рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЖрдкрдХреЛ рдПрдХ рд╕рдЦреНрдд рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред
PHPUnit рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЙрд╕ рдЖрджреЗрд╢ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреА рд╡рд╛рдкрд╕реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рд░реНрднрд░ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рджреЗ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд░реНрдЧ рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдкрд░ рд╡рдВрд╢ рд╢реНрд░реЗрдгреА рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддреБрд░рдВрдд рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
Class ParentTestCase extends PHPUnit_Framework_TestCase { public function testOne() { self::assertTrue(true); } public function testTwo() { self::assertTrue(true); } }
class ChildTestCase extends ParentTestCase { public function testThree() { self::assertTrue(true); } }
рдореИрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐
рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╡рдВрд╢ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдПрдХрддреНрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкреВрд░реНрд╡рдЬ рд╡рд░реНрдЧ рд╕реЗред
рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ PHPUnit рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗ рдФрд░ рдЗрд╕ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЖрдзрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред
рдирд┐рд░реНрдгрдп
рдкрд╣рд▓реЗ, рдЖрдЗрдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдХрд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
TestCase рдХрд╛ рд╡рдВрд╢рдЬ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВред
class MagicTestCase extends PHPUnit_Framework_TestCase { protected $order = array(); public function setOrderSet(array $orderSet) { $this->order = $orderSet; } public function getOrderSet() { return $this->order; } }
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рдВрд╢рд╛рдиреБрдЧрдд рд╡рд░реНрдЧ рдореЗрдВ
PHPUnit_Framework_TestSuite рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП
addTestMethod рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
$test->setOrderSet(PHPUnit_Util_Test::getDependencies($class->getName(), $name));
рдЕрдм рд╣рдорд╛рд░реЗ рдЯреЗрд╕реНрдЯрд╕реБрдЗрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдкреВрд░рдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреНрд░рдо рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХреЗред рд╡рд╣рд╛рдВ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЖрджреЗрд╢ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
foreach($this->tests as $test) { $test->setOrderSet( array_unique($this->getRecursiveOrderSet($test, $test->getName())) ); } usort($this->tests, array("MagicUtilTest ", "compareTestOrder"));
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
addTestSuite рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг (
PHPUnit_Framework_TestSuite) рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд
TestSuite рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рдВрд╢реЛрдзрд┐рдд
TestSuite рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
$this->addTest(new MagicTestSuite($testClass));
рдкрд░рд┐рдгрд╛рдореА рд╡рд░реНрдЧ:
class MagicTestSuite extends PHPUnit_Framework_TestSuite { public function __construct($theClass = '', $name = '') { parent::__construct($theClass, $name); foreach($this->tests as $test) { $test->setOrderSet( array_unique($this->getRecursiveOrderSet($test, $test->getName())) ); } usort($this->tests, array("MagicUtilTest ", "compareTestOrder")); } protected function getRecursiveOrderSet($object, $methodName) { $orderSet = array(); foreach($this->tests as $test) { if ($test->getName() == $methodName && get_class($object) == get_class($test)) { $testOrderSet = $test->getOrderSet(); if (!empty($testOrderSet)) { foreach($testOrderSet as $orderMethodName) { if(!in_array($orderMethodName, $orderSet)) { $orderResult = $this->getRecursiveOrderSet($test, $orderMethodName); $orderSet = array_merge($orderSet, $orderResult); } } } $orderSet = array_merge($orderSet, $testOrderSet); } } return $orderSet; } protected function addTestMethod(ReflectionClass $class, ReflectionMethod $method) { $name = $method->getName(); if ($this->isPublicTestMethod($method)) { $test = self::createTest($class, $name); if ($test instanceof PHPUnit_Framework_TestCase || $test instanceof PHPUnit_Framework_TestSuite_DataProvider) { $test->setDependencies( PHPUnit_Util_Test::getDependencies($class->getName(), $name) ); } $test->setOrderSet(PHPUnit_Util_Test::getDependencies($class->getName(), $name)); $this->addTest($test, PHPUnit_Util_Test::getGroups( $class->getName(), $name) ); } else if ($this->isTestMethod($method)) { $this->addTest( self::warning( sprintf( 'Test method "%s" is not public.', $name ) ) ); } public function addTestSuite($testClass) { if (is_string($testClass) && class_exists($testClass)) { $testClass = new ReflectionClass($testClass); } if (!is_object($testClass)) { throw PHPUnit_Util_InvalidArgumentHelper::factory( 1, 'class name or object' ); } if ($testClass instanceof PHPUnit_Framework_TestSuite) { $this->addTest($testClass); } else if ($testClass instanceof ReflectionClass) { $suiteMethod = FALSE; if (!$testClass->isAbstract()) { if ($testClass->hasMethod(PHPUnit_Runner_BaseTestRunner::SUITE_METHODNAME)) { $method = $testClass->getMethod( PHPUnit_Runner_BaseTestRunner::SUITE_METHODNAME ); if ($method->isStatic()) { $this->addTest( $method->invoke(NULL, $testClass->getName()) ); $suiteMethod = TRUE; } } } if (!$suiteMethod && !$testClass->isAbstract()) { $this->addTest(new MagicTestSuite($testClass)); } } else { throw new InvalidArgumentException; } } }
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рджреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рд╣реИред
class MagicUtilTest { public static function compareTestOrder(PHPUnit_Framework_TestCase $object1, PHPUnit_Framework_TestCase $object2) { if (in_array($object2->getName(), $object1->getOrderSet())) { return 1; } if (in_array($object1->getName(), $object2->getOrderSet())) { return -1; } return 0; } }
рдЖрд╡реЗрджрди
рдкрд░реАрдХреНрд╖рдг рд░рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
require dirname(__FILE__) . DIRECTORY_SEPARATOR.' runSuite.php'; PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT'); require_once 'PHPUnit/TextUI/Command.php'; $tests= runSuite::suite(); PHPUnit_TextUI_TestRunner::run($tests); exit;
рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдЯреЗрд╕реНрдЯрд╕реБрдЗрдЯ рдХреНрд▓рд╛рд╕ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рдкрд░реАрдХреНрд╖рдг рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдмрдирд╛рдП рд╣реБрдП рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ:
require_once 'MagicTestSuite.php'; class runSuite extends MagicTestSuite { public static function suite() { $suite = new self(); $suite->addTestSuite(тАЬChildTestCaseтАЭ); } }
рдЦреИрд░, TestCases, рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
require_once 'MagicTestCase.php'; class ParentTestCase extends MagicTestCase { public function testOne() { self::assertTrue(true); } public function testTwo() { self::assertTrue(true); } }
require_once 'ParentTestCase.php'; class ChildTestCase extends ParentTestCase { public function testThree() { self::assertTrue(true); } }
рдкреНрд░рддрд┐рдмрдВрдз
рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдЗрдВрдЯрд░рд▓реЙрдХрд┐рдВрдЧ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдВрдЧреЗ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдорд┐рд▓реЗрдЧрд╛ред
рдмреЗрд╢рдХ, рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдПрдХ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ ... рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ (рдПрдХ рдорд╛рдирд╡реАрдп рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдЖрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдВрдж рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред