рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдпрд╛ рди рдХрд░рдирд╛ рдмрд╣рд╕ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдордЧреНрд░ рдкреНрд░рд╢реНрди рд╣реИ "рдХреЛрдб рдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред" рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╢реЗрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЕрд╕рдорд╛рди рд░реВрдк рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: "рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред"
рдЕрдЧрд▓рд╛, рдореИрдВ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
PHPUnit рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:
- рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд░рд╛рдЬреНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛,
- рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕рдВрд╢реЛрдзрди рдХрд░рдирд╛,
- рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░рд┐рдХреЙрд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдбреЗрдЯрд╛ рдХреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдерд╛ред рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ 2 рд╕рдорд╛рдзрд╛рди рдкреЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рднреА рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдЕрдХреНрд╕рд░ "рд╡рд░реНрдХрд┐рдВрдЧ" рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЕрдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЛ рд░реЛрд▓ рдХрд░рддреЗ рд╕рдордп рдЙрдарддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ: рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреИрд╕реЗ рд▓реМрдЯрд╛рдПрдВ:
рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ Transactional рд╣реИред рдЬрд┐рд╕рдХрд╛ рд╕рд╛рд░ рдПрдХ рд╣реА рд▓реЗрди-рджреЗрди рдХреЗ рднреАрддрд░ рд╕рдВрдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ рд▓реЗрдирджреЗрди рдХрд╛ рд░реЛрд▓рдмреИрдХ рдХрд░рдирд╛ рд╣реИред
рджреВрд╕рд░рд╛ - рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, "рдХрд╛рд░реНрдп" рдЖрдзрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ рдФрд░ рдЙрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
"рд▓реЗрди-рджреЗрди" рдкрде рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рддрд╛ рд╣реИред
рдХрд╛рд░реНрдп рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдПрдХрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдорд╛рдкрди рдХреЗ рд▓рд┐рдП рдЙрдмрд╛рд▓рддрд╛ рд╣реИред рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рд╕реЗ рд╕рднреА рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдВрдЧреЗред рд╡рд░реНрдЧ рд╕реНрд╡рдпрдВ PHPUnit_Extension_Database_TestCase рдХрд╛ рд╡рдВрд╢рдЬ рд╣реЛрдЧрд╛ред
DBUnit рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ getConnection Method рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдмрдирд╛рдП рдЧрдП рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдирджреЗрди рдХреЗрд╡рд▓ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рднреАрддрд░ "рд▓рд╛рдЗрд╡" рд╣реЛрддрд╛ рд╣реИред
public function getConnection() { $pdo = new PDO("mysql:host=localhost;dbname=dbname", 'root', 'password'); return $this->createDefaultDBConnection($pdo, 'php'); }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдкрд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ, рдФрд░ getConnection рд╡рд┐рдзрд┐ рдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд▓реМрдЯрд╛рдПрдЧреА:
public function __construct($name = null, array $data = array(), $dataName = '') { parent::__construct($name, $data, $dataName); $this->pdo = new PDO("mysql:host=localhost;dbname=dbname", 'root', 'password'); $this->pdo->exec('SET foreign_key_checks = 0');
рдореИрдВ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдХреНрд╖рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛: рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, DBUnit рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдмрд▓ рдкрд░ рдЯреНрд░рдВрдХрдЯ рднреЗрдЬрдХрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдХреНрд╕рд░ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рд╕рд╛рдлрд╝ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреНрд▓реАрдВрдЬрд┐рдВрдЧ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдЬрд╛рдБрдЪ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред
SET foreign_key_checks = 0
рд╣рдордиреЗ рдкреАрдбреАрдУ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ ($ рдпрд╣-> pdo-> рдХреНрд╡реЗрд░реА ())
рдЕрдм рдмрд╛рдд рдЫреЛрдЯреА рд╣реИ: рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд▓реЗрдирджреЗрди рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗрдВ:
function __destruct() { $this->pdo->rollBack(); }
рдХреЛрдб рдХрд╛рдлреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди 2 рдиреБрдХрд╕рд╛рди рд╣реИрдВ:
1) рдЯреНрд░рдВрдХрдЯ рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд▓реЗрдирджреЗрди рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ dbUnit рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрд▓реЛрдб рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
2) рдпрджрд┐ рдЖрдкрдХрд╛ DBMS MySQL рд╣реИ, рддреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдПрдХ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ: тАЬрд▓реЙрдХ рд╡реЗрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд╛рд░ рд╣реЛ рдЧрдпрд╛; рд▓реЗрдирджреЗрди рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред тАЭ
MySQL рдмрдЧрдЯреНрд░реИрдХрд░ рдореЗрдВ рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди
рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЯреНрд░рдВрдХрдЯ рдСрдкрд░реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ:
DBUnit рдХреЗ рдЖрдВрддрд░рд┐рдХ рднрд╛рдЧ рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо PHPUnit_Extensions_Database_Operation_Factory рд╡рд░реНрдЧ рдореЗрдВ CLEAN_INSERT рд╡рд┐рдзрд┐ рдкрд╛рддреЗ рд╣реИрдВ:
public static function CLEAN_INSERT($cascadeTruncates = FALSE) { return new PHPUnit_Extensions_Database_Operation_Composite(array( self::TRUNCATE($cascadeTruncates), self::INSERT() )); }
рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PHPUnit_Framework_TestCase рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
protected function getSetUpOperation() { return PHPUnit_Extensions_Database_Operation_Factory::CLEAN_INSERT(); }
TRETCATE рдлрд╝рдВрдХреНрд╢рди рдХреЛ DELETE_ALL рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдРрд╕реЗ рдмреБрд░реЗ рд╢рд┐рд╖реНрдЯрд╛рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PHPUnit рдХреЗ рдЖрдВрддреЛрдВ рдореЗрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рд╡рд░реНрдЧ рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
abstract class TrunsactionFiendlyDatabaseTestCase extends PHPUnit_Extensions_Database_TestCase { protected function getSetUpOperation() { return new PHPUnit_Extensions_Database_Operation_Composite( array ( PHPUnit_Extensions_Database_Operation_Factory::DELETE_ALL(), PHPUnit_Extensions_Database_Operation_Factory::INSERT() ) ); } }
рдХреНрдпрд╛ рд╕рднреА рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ "рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрднрд┐рднрд╛рд╡рдХ" рд╡рд░реНрдЧ рдХреЛ TrunsactionFiendlyDatabaseTestCase () рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдЗрдирдореЗрдВ рд╕реЗ 2 рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрд╡рд╛рдж рдФрд░ рдиреИрддрд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рддрд░реНрдХ рдХреЗ 2 рд╕реНрддрд░реЛрдВ рдХреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдореА рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж рдПрдХ рд▓реЗрди-рджреЗрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ рдФрд░ рдПрдХ рдирдИ рд╢реБрд░реБрдЖрдд рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ "рд▓реЙрдХ рд╡реЗрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдкрд╛рд░ рдХрд░ рдЧрдП" рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред
public function tearDown() { $this->pdo->rollBack(); $this->pdo->beginTransaction(); }
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк : рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рднреАрддрд░ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рд╕рднреА рдСрдкрд░реЗрд╢рди рдХреЛ рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рдирдХрд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╡рд┐рдЪрд╛рд░ рд╕рддрд╣ рдкрд░ рддреИрд░рддрд╛ рд╣реИ: рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЛрдиреЛрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрджреНрдпрддрд┐рдд рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдПрдХ рд╕реНрдерд┐рддрд┐ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо "рдореБрдХрд╛рдмрд▓рд╛" рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред DbUnit рдХреЗ рд╕рд╛рде рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдареАрдХ рдЪрд▓реЗрдЧрд╛ред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкрд╣рд▓реЗ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдзрд╛рд░ рдХреЛ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
PHPUnit рдЖрдкрдХреЛ рд░рдирд┐рдВрдЧ рдЯреЗрд╕реНрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ "рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдлрд╛рдЗрд▓" рдЙрд░реНрдл тАЛтАЛрдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ phpunit.xml рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
<phpunit bootstrap="./application/bootstrap.php" >
рдпрд╣ рдХрдИ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдлрд╝рд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреЗ рдЪрд░рдгреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛ рд╣реИ
DROP DATABASE IF EXISTS `testDB`
рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВ
CREATE DATABASE `testDB`
рдмреЗрд╢рдХ, рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЖрдзрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдмреЗрдореЗрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рдбрд╛рд▓ рджрд┐рдпрд╛, рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЖрдзрд╛рд░ рдкреБрд░рд╛рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрдзрд╛рд░ рдХреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ
SHOW TABLES FROM `developDB`
рдФрд░ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдирдХреА рдЫрд╡рд┐ рдФрд░ рд╕рдорд╛рдирддрд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдмрдирд╛рдПрдБ:
CREATE TABLE `$table` LIKE `developDB`.`$table`"
рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдорд┐рд▓рддреЗ рд╣реИрдВ:
$res = $this->pdo->exec("DROP DATABASE IF EXISTS `testDB`"); $res = $this->pdo->exec("CREATE DATABASE `testDB`"); $tables = $this->pdo->query("SHOW TABLES FROM `developDB`"); $tables = $tables->fetchAll(PDO::FETCH_COLUMN, 0); foreach ($tables as $table) { $res = $this->pdo->exec("CREATE TABLE `$table ` LIKE `developDB`.`$table`"); }
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╣реИ, "рдкреНрд░рд╛рдХреГрддрд┐рдХ рдХреЗ рд╕рдорд╛рди"
рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ DbUnit рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдХреЛрдИ рдорд╛рдирдХ DbUnit рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛
рд▓реЗрди-рджреЗрди, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдХрд╛рдлреА рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд▓реЗрдирджреЗрди рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рди рдХрд┐ рдкреВрд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред
рд▓реЗрдХрд┐рди рдХрдИ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдХрд┐рддрдирд╛ рддреЗрдЬ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдп рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕рд╣рд╛рдпрдХ рдСрдкрд░реЗрд╢рди рдХрд╛ рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдмрдврд╝рддрд╛ рд╣реИред рдФрд░ рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рдо рдХреЗ рд╕рд╛рде, рд╡реЗ рднреА рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдУ (рдПрди) рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред
рдпреВрдкреАрдбреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
zim32 рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
рд╕рд╛рде рд╣реА, рдпрд╣ рд╡рд┐рдзрд┐ рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: ALTER TABLE, CREATE INDEX, DROP INDEX, DROP TABLE, RENAME TABLEред
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдЗрд╕рдХрд╛ рд░рдирд┐рдВрдЧ рдЯрд╛рдЗрдо рд░рдирд┐рдВрдЧ рдЯреЗрд╕реНрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ = рдХрд╛рд╕реНрдЯред рдпрд╣ рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реИ рдпрд╣ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдирдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ 40 рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░, рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдХреНрд▓реЛрдирд┐рдВрдЧ рдореЗрдВ рд▓рдЧрднрдЧ 8 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖ : рдПрдХрд▓ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдЪрд▓рд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ "рд▓реЗрди-рджреЗрди" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ DbUnit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╕рд╛рдордЧреНрд░реА рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ, рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
www.smartyit.ru/php