Badoo рдкрд░ рдХреЛрдб рдХрд╡рд░реЗрдЬ

рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреА рдкреАрдврд╝реА рдХреЛ 70 рд╕реЗ 2.5 рдШрдВрдЯреЗ рддрдХ рддреЗрдЬ рдХрд░ рджрд┐рдпрд╛ рдерд╛ред рдЗрд╕реЗ рдирд┐рд░реНрдпрд╛рдд / рдЖрдпрд╛рдд рдХрд╡рд░реЗрдЬ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдиреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА phpunit, phpcov рдФрд░ php-code-рдХрд╡рд░реЗрдЬ рдХреЛ рдорд╛рд░рд╛ред

рд╣рдордиреЗ рдмрд╛рд░-рдмрд╛рд░ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рдФрд░ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдереЛрдбрд╝реЗ рд╕рдордп рдореЗрдВ рджрд╕рд┐рдпреЛрдВ рд╣рдЬрд╝рд╛рд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА "рдбреНрд░рд╛рдЗрд╡" рдХрд░рддреЗ рд╣реИрдВред рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг, рдореБрдЦреНрдп рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдореАрдЯреНрд░рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдХрд╡рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЖрдЬ рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдЗрд╕реЗ рдмрд╣реБрдкрд░рдд рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреИрд╕реЗ рдЧрд┐рдирд╛ рдЬрд╛рдП, рдЗрд╕реЗ рдПрдХрддреНрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдХрд░реЗрдВред рд╣рдорд╛рд░реА рдЖрд╢рд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛, рдХрд╡рд░реЗрдЬ рдХреА рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП 70 рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддреА рдереАред рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рднреА рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╡рд░реЗрдЬ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реБрдП рдХреЗрд╡рд▓ 2.5 рдШрдВрдЯреЗ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ 30 рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рджреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо PHP рдореЗрдВ Badoo рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╣рдо рд╕реЗрдмрд╕реНрдЯрд┐рдпрди рдмрд░реНрдЧрдореИрди (рд╕реЗрдмрд╕реНрдЯрд┐рдпрди рдмрд░реНрдЧрдореИрди, phpunit.de ) рд╕реЗ PHPUnit рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд╡рд░реЗрдЬ, рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣, рд╕рд╛рдзрд╛рд░рдг рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ Xdebug рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

xdebug_start_code_coverage(); //тАж    тАж $codeCoverage = xdebug_get_code_coverage(); xdebug_stop_code_coverage(); 

рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдПрд░реЗ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╡рд░реЗрдЬ рдХрд▓реЗрдХреНрд╢рди рдХреЗ рджреМрд░рд╛рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдЭрдВрдбреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░: рдЪрд╛рд╣реЗ рдХреЛрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реЛ, рдпрд╛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВред Xdebug рд▓реЗрдкрд┐рдд рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реЗрдмреЗрд╕реНрдЯрд┐рдпрди рдмрд░реНрдЧрдореИрди рдореЗрдВ рдПрдХ PHP_CodeCoverage рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдХрд╡рд░реЗрдЬ рдПрдХрддреНрд░ рдХрд░рдиреЗ, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рд╡рд┐рд╕реНрддрд╛рд░рдгреАрдп рдФрд░ рдХрд╛рдлреА рдЦреБрд╢ рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдХрдВрд╕реЛрд▓ рдлреНрд░рдВрдЯреЗрдВрдб phpcov рд╣реИ ред
рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдХрд╡рд░реЗрдЬ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЧрдгрдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА PHPUnit рдХреЙрд▓ рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реИрдВ:

  --coverage-clover <file> Generate code coverage report in Clover XML format. --coverage-html <dir> Generate code coverage report in HTML format. --coverage-php <file> Serialize PHP_CodeCoverage object to file. --coverage-text=<file> Generate code coverage report in text format. 

--Coverage-php рд╡рд┐рдХрд▓реНрдк рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХрд╡рд░реЗрдЬ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрд▓рдЧ * .cov рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕реБрдВрджрд░ HTML рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░реАрдХрд░рдг рдФрд░ рдЙрддреНрдкрд╛рджрди - ph рдлреНрд▓реИрдЧ рдХреЛ themerge рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 --merge Merges PHP_CodeCoverage objects stored in .cov files. 

рдпрд╣ рд╕рдм рдХреБрдЫ рддрд╣, рд╕реБрдВрджрд░ рд╣реИ рдФрд░ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рд░ рдХреЛрдИ рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓реЗрдЦрдХ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ PHP_CodeCoverage рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрдпрд╛рдд-рдЖрдпрд╛рдд рддрдВрддреНрд░ рдХреА "рдЧреИрд░-рдЗрд╖реНрдЯрддрдорддрд╛" рдЬрд▓реНрджреА рд╕реЗ рд╕рд╛рдордиреЗ рдЖрдПрдЧреАред рдЪрд▓рд┐рдП рдЗрд╕реЗ рдХреНрд░рдо рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдмрд╛рдд рд╣реИред

рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рд┐рдкреЛрд░реНрдЯрд░ рд╡рд░реНрдЧ PHP_CodeCoverage_Report_PHP * .cov рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ () рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ PHP_CodeCoverage рд╡рд░реНрдЧ рдХреЗ рдЗрдирдкреБрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓реЗрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд░рдордмрджреНрдз () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рддреА рд╣реИред

рдкрд░рд┐рдгрд╛рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрде рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ), рдпрд╛ рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛ред

 class PHP_CodeCoverage_Report_PHP { /** * @param PHP_CodeCoverage $coverage * @param string $target * @return string */ public function process(PHP_CodeCoverage $coverage, $target = NULL) { $coverage = serialize($coverage); if ($target !== NULL) { return file_put_contents($target, $coverage); } else { return $coverage; } } } 

Phpcov рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХрд░рдирд╛, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди * .cov рдХреЗ рд╕рд╛рде рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ unserialize () рдХрд░рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рддрдм PHP_CodeCoverage рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд░реНрдЬ () рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╡рд░реЗрдЬ рдПрдХрддреНрд░ рд╣реЛрддрд╛ рд╣реИред

  protected function execute(InputInterface $input, OutputInterface $output) { $coverage = new PHP_CodeCoverage; $finder = new FinderFacade( array($input->getArgument('directory')), array(), array('*.cov') ); foreach ($finder->findFiles() as $file) { $coverage->merge(unserialize(file_get_contents($file))); } $this->handleReports($coverage, $input, $output); } 

рдорд░реНрдЬ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ array_merge () рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рд▓рдп рд╣реИ, рдЬрд┐рд╕рдХреА рдЕрдирджреЗрдЦреА рдХреА рдЧрдИ рдЫреЛрдЯреА-рдЫреЛрдЯреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ phpcov (--blacklist рдФрд░ --whitelist) рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  /** * Merges the data from another instance of PHP_CodeCoverage. * * @param PHP_CodeCoverage $that */ public function merge(PHP_CodeCoverage $that) { foreach ($that->data as $file => $lines) { if (!isset($this->data[$file])) { if (!$this->filter->isFiltered($file)) { $this->data[$file] = $lines; } continue; } foreach ($lines as $line => $data) { if ($data !== NULL) { if (!isset($this->data[$file][$line])) { $this->data[$file][$line] = $data; } else { $this->data[$file][$line] = array_unique( array_merge($this->data[$file][$line], $data) ); } } } } $this->tests = array_merge($this->tests, $that->getTests()); } 

рдпрд╣ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдФрд░ рдбрд┐рд╕рд┐рдПрд░рд▓рд╛рдЗрдЬреЗрд╢рди рдПрдкреНрд░реЛрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдерд╛ рдЬреЛ рдмрд╣реБрдд рд╣реА рд╕рдорд╕реНрдпрд╛ рдмрди рдЧрдИ рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдХрд╡рд░реЗрдЬ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╕рдореБрджрд╛рдп рдиреЗ PHP рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдФрд░ рдЧреИрд░-рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ:
http://stackoverflow.com/questions/1256949/serialize-a-large-array-in-php ;
http://habrahabr.ru/post/104069 рдЖрджрд┐ред

рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, PHP рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЬрд┐рд╕рдореЗрдВ 35 рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдХрд╡рд░реЗрдЬ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рдЬрди рдХрд░рддреА рд╣реИрдВ, рдХрдИ рд╕реМ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдкреНрд░рддреНрдпреЗрдХред рдПрдХ рдЖрдо рдлрд╛рдЗрд▓, рд╡рд┐рднрд┐рдиреНрди рдзрд╛рд░рд╛рдУрдВ рд╕реЗ "рд╕рдиреНрдирд┐рд╣рд┐рдд" рдХрд╛ рд╡рдЬрди рд▓рдЧрднрдЧ 2 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рд╡реЙрд▓реНрдпреВрдо рдкрд░ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдЦреБрдж рдХреЛ рдЕрдкрдиреА рдорд╣рд┐рдорд╛ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ - рд╣рдо рдХрдИ рджрд┐рдиреЛрдВ рддрдХ рдХрд╡рд░реЗрдЬ рдХреА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗред

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐ - var_export рдФрд░ рдмрд╛рдж рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд░рд┐рдкреЛрд░реНрдЯрд░ рд╡рд░реНрдЧ php- рдХреЛрдб-рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ var_export рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ:

 class PHP_CodeCoverage_Report_PHPSmart { /** * @param PHP_CodeCoverage $coverage * @param string $target * @return string */ public function process(PHP_CodeCoverage $coverage, $target = NULL) { $output = '<?php $filter = new PHP_CodeCoverage_Filter();' . '$filter->setBlacklistedFiles(' . var_export($coverage->filter()->getBlacklistedFiles(), 1) . ');' . '$filter->setWhitelistedFiles(' . var_export($coverage->filter()->getWhitelistedFiles(), 1) . ');' . '$object = new PHP_CodeCoverage(new PHP_CodeCoverage_Driver_Xdebug(), $filter); $object->setData(' . var_export($coverage->getData(), 1) . '); $object->setTests(' . var_export($coverage->getTests(), 1) . '); return $object;'; if ($target !== NULL) { return file_put_contents($target, $output); } else { return $output; } } } 

рд╣рдордиреЗ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк PHPSmart рдХреЛ рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдХрд╣рд╛ рд╣реИред рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ * .рд╕реНрдорд╛рд░реНрдЯ рд╣реИред

PHP_CodeCoverage рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдирдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╕рдиреЗ рдФрд░ рдкрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЬреЛрдбрд╝реЗ рдЧрдПред
рдлрд╝рд╛рдкреБрдирд┐рдЯ рдФрд░ рдлрд╝рд╛рдкреНрдкреЛрд╡ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреБрдЫ рд╕реБрдзрд╛рд░, рддрд╛рдХрд┐ рд╡реЗ рд╕реАрдЦреЗрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рд╣рдорд╛рд░рд╛ рдХрд╡рд░реЗрдЬ рдХреЗрд╡рд▓ рдврд╛рдИ рдШрдВрдЯреЗ рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╢реБрд░реВ рд╣реБрдЖред
рдпрд╣рд╛рдБ рдЖрдпрд╛рдд рд╣реИ:

  foreach ($finder->findFiles() as $file) { $extension = pathinfo($file, PATHINFO_EXTENSION); switch ($extension) { case 'smart': $object = include($file); $coverage->merge($object); unset($object); break; default: $coverage->merge(unserialize(file_get_contents($file))); } } 

рдЖрдк GitHub рдкрд░ рд╣рдорд╛рд░реЗ рд╕рдВрдкрд╛рджрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред
github.com/uyga/php-code-coverage
github.com/uyga/phpcov
github.com/uyga/phpunit

рд╣рдордиреЗ рд╕реЗрдмрд╕реНрдЯрд┐рдпрди рдмрд░реНрдЧрдореИрди рдХреЛ рд╣рдорд╛рд░реЗ рд╕рдВрдкрд╛рджрдиреЛрдВ рдХреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рднреЗрдЬрд╛, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рднрдВрдбрд╛рд░ рдореЗрдВ рдЬрд▓реНрдж рд╣реА рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред
github.com/sebastianbergmann/phpunit/pull/988
github.com/sebastianbergmann/phpcov/pull/7
github.com/sebastianbergmann/php-code-coverage/pull/185

рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рд╡рд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдереЗ, рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ:



рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЦреБрд╢реА-рдЦреБрд╢реА рдХрд┐рдпрд╛ред рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд░рд┐рд╡рд░реНрддрди * .cov рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреНрд░рд╛рд░реВрдк рдХреА рдЬрдЧрд╣, рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рдЧрдП рд╣реИрдВред
github.com/sebastianbergmann/php-code-coverage/pull/186
github.com/sebastianbergmann/phpcov/pull/8
github.com/sebastianbergmann/phpunit/pull/989

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдЕрдиреБрдХреВрд▓рди рдиреЗ рд╣рдореЗрдВ рд▓рдЧрднрдЧ 30 (!) рдЯрд╛рдЗрдореНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░реЗрдЬ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдЗрд╕рдиреЗ рд╣рдореЗрдВ рдХрд╡рд░реЗрдЬ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдмрд▓реНрдХрд┐ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рджреЛ рд╕реЗрдЯ рднреА рдЬреЛрдбрд╝реЗред рдЗрд╕рд╕реЗ рдЖрдпрд╛рдд-рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд╕рдордп рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╡рд┐рд▓рдп рдкрд░ рдХрд╛рдлреА рдЕрд╕рд░ рдирд╣реАрдВ рдкрдбрд╝рд╛ред

рдкреБрдирд╢реНрдЪ:


рдЗрд▓рд┐рдпрд╛ рдЖрдпреБ,
рдХреНрдпреВрдП рд▓реАрдб

Source: https://habr.com/ru/post/In192538/


All Articles