Phpunit: рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рд╕реЗрдЯрдЕрдк рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдлрд╝рд░ре░ 2013  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sebastianbergmann/phpunit

рд╕реНрдерд┐рд░ setupBeforeClass рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреВрд╕рд░реА рддрд░рдл рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг:

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдбреЗрдкреНрдЯрд░ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдХреБрдЫ рдПрдбреЗрдкреНрдЯрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд╛рддрд╛рд╡рд░рдг (рдпрд╛рдиреА рд▓рд┐рдирдХреНрд╕ рдмрдирд╛рдо рд╡рд┐рди) рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ,
  • рдореИрдВ рдПрдХ рдмрд╛рд░ рд╕рдорд░реНрдерд┐рдд рдПрдбреЗрдкреНрдЯрд░ рдХреА рдПрдХ рд╕реВрдЪреА рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ,
  • рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдмрд╕реЗ рд╕рд╛рдл рддрд░реАрдХрд╛ setupBeforeClass рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд╛рддрд╛ рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рд╛: 3.7.14

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@epdenouden рдЬреЗрдЖрдИрдЯреА? рдХреНрдпрд╛ рдЖрдк PHP рдХреЗ рд▓рд┐рдП рдЬреЗрдЖрдИрдЯреА рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛? рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБ; рдХреНрдпрд╛ рдЖрдк PHP7.x рдФрд░ PHP8.x рдпрд╛ PHPUnit7.x рдФрд░ PHPUnit8.x рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ ?!

@MAChitgarha рдореИрдВ рдЖрдкрдХреЗ рднреНрд░рдо рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ PHP8 рдХреЛ рдЬрд╕реНрдЯ-рдЗрди-рдЯрд╛рдЗрдо _compiler_ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдирдП рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: рдПрдХ рдЬрд╕реНрдЯ-рдЗрди-рдЯрд╛рдЗрдо _loader_ рдЙрд░реНрдл тАЛтАЛрдЖрд▓рд╕реА-рд▓реЛрдбрд┐рдВрдЧред рдХреЗрд╡рд▓ рд╡рд╣реА рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдм рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

рдпрд╣ рдЖрдЧрд╛рдореА PHP рд╕рдВрд╕реНрдХрд░рдг 8 JIT рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ PHP рднрд╛рд╖рд╛ рдХреА рдХрд┐рд╕реА рднреА рдореБрд╢реНрдХрд┐рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕рд╛рд░рд╛ рдХрд╛рдо PHPUnit рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдЯреЗрд╕реНрдЯ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рд░рдирд┐рдВрдЧ рдЗрддреНрдпрд╛рджрд┐ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ред

рдЕрдЧрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЙрд╕ рдХрдо рдХрд┐рдП рдЧрдП GCP рдпрд╛ AWS рдЗрдирд╡реЙрдЗрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдореИрдВ

рд╕рднреА 21 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдЫ рдЖрджреЗрд╢ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рддрд╛рдХрд┐ рд╕реНрдерд┐рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ setupBeforeClass рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рд╕реНрдерд┐рд░ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рд╣реА рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдХреНрдпреЛрдВ рди рд╕рд┐рд░реНрдл рдЖрд▓рд╕реА рдПрдбреЗрдкреНрдЯрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ? рддрдм рдЖрджреЗрд╢ рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред

рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдЪрд▓рд╛рдП рдмрд┐рдирд╛ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдХрд┐рддрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреА рд╣реИред рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рдо рдмреА/рд╕реА рдХреЛ рддреЛрдбрд╝ рджреЗрдВрдЧреЗ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдРрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ Countable рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЗрд╕ рддрд░рд╣ рд╣рдо рдЗрди рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрд╡рдЪреНрдЫ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@whatthejeff рдпрд╣реА рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рд╕рд╛рдл рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдкрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

@sebastianbergmann рдареАрдХ рд╣реИ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдм рд╕реЗ рдкрд╣рд▓реЗ рдХреНрдпреЛрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЙрдХреНрдЯрд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? (рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЗ рдареАрдХ рд╣реЛрдиреЗ рдкрд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ)ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреА: рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рдкреВрд░реНрд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛрддреА рд╣реИред

рдЖрдкрдХреЗ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ред

@vicb , рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ-рд╕рдВрдмрдВрдзрд┐рдд рдкреАрдЖрд░ рдХреЛ рдЦреБрд╢реА рд╕реЗ рд╡рд┐рд▓рдп рдХрд░ рджреВрдВрдЧрд╛ред

рдореБрдЭреЗ рджреГрд╢реНрдп рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, @dataProvider рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдорд┐рдЯрд╛рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп yield рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

@srosato рдореИрдВ рдЧреВрдВрдЧрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реВрдВ (рдореИрдВрдиреЗ рдЙрдкрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)ред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? https://gist.github.com рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрджрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ @dataProvider рдХреЛ рд╕реЗрдЯрдЕрдк рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдмрд╣реБрдд рдмрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ eval рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

public function myProvider() {
    return [
        'new Klass("param 1", "param 2")',
        'new Klass("param 1", "param 2")',
    ];
}

/**
 * <strong i="8">@dataProvider</strong> myProvider
 */
public testMyFunction($instance_str) {
    $klass = eval("return {$instance_str};");
    # continue testing $klass ...
}

рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ:

рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ (рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ) рдкрд░ рдирд┐рд░реНрднрд░ рдбреЗрдЯрд╛рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗ рдмрдЬрд╛рдп рдореИрдВ setUp() рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рдХреЗ рд╡рд░реНрдЧ рд╕рджрд╕реНрдп (рд╕рджрд╕реНрдпреЛрдВ) рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛/рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
tearDown() рдореИрдВ рдЗрд╕реЗ/рдЙрдиреНрд╣реЗрдВ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╛ рдЬрдм рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдПрдВ рд╣реЛрддреА рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП clear() рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВред

рдЬрдм рддрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЯреЗрд╕реНрдЯ-рдХреНрд▓рд╛рд╕-рд╡рд╛рдЗрдб рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред
рд▓реЗрдХрд┐рди рдЬрдм рдРрд╕реА рдПрдХ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реЛрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕рдордЧреНрд░ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдбреАрдмреА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ setUpBeforeClass() рд╕реЗрдЯ рд╣реИ рдФрд░ $queryBuilder рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ setUp() рдореЗрдВ рд╡рд░реНрдЧ-рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдЗрдВрдЬреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдмрдЬрд╛рдп) рдЗрд╕реЗ рдбреЗрдЯрд╛рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛)ред

рдПрдХ рд╕рдорд╛рдзрд╛рди рдПрдХ рдирдИ рдирд┐рдЬреА рдкрджреНрдзрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрджрд░ static рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдХрдИ рдЪрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗрдЯ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрди рд╕рднреА рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ (рдпрд╛ рдЙрдкрдЬ) рджреЗрдВред рдЗрд╕ рддрд░рд╣, _the рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рднрд▓реЗ рд╣реА рдЖрдкрдХреЗ рдкрд╛рд╕ рджрд╕ рдкреНрд░рджрд╛рддрд╛ рд╣реЛрдВ рдпрд╛ рдЬреЛ рднреА рд╣реЛрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЗрд╕реЗ setUpBeforeClass() рдпрд╛ setUp() рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦреЗрдВ:

private static function getData()
{
    static $data, $anotherData;

    if (!isset($data)) {
        $data = new TestClass();
        $anotherData = [];
    }

    return [
        $data,
        // Or: clone $data
        $anotherData,
    ];
}

public static function setUpBeforeClass()
{
    list(self::$sampleJson, self::$sampleData) = self::getData(); 
}

public function sampleProvider()
{
    $data = self::getData();

    return [
        $data
    ];
}

@MAChitgarha рдХрд▓ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдореБрдЭреЗ рдЗрд╕ рдЯрд┐рдХрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ред :)

рдореИрдВ #3736 рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рддрд░реНрдХ рдХреЛ рдкреБрди: рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛:

  • рдЬреИрд╕реЗ рд╣реА рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рд▓реЛрдб рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдм рд░рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрддрдиреА рдмрдбрд╝реА рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА
  • рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рдлрд┐рдХреНрд╕реНрдЪрд░ setUpBeforeClass рдФрд░ setUp рдмрд╛рдж рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ
  • рдЧреИрд░-рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
  • рдЬрдирд░реЗрдЯрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдВрдЧреЗ

@epdenouden рдпрд╣ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реБрдИ! ;) рдЖрдкрдХреА рд╕реВрдЪреА рдореЗрдВ рджреВрд╕рд░рд╛ рдЖрдЗрдЯрдо рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЧреИрд░-рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ

рдХреНрдпрд╛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ? рдореИрдВ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реНрдерд┐рд░ рд╡рд╛рд▓реЗ рдХреЗ рдмрдЬрд╛рдп рдЧреИрд░-рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╡реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (PHPUnit 7.5.6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдХреНрдпрд╛ рдореИ рдЧрд▓рдд рд╣реБ?

рдХреНрдпрд╛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ? рдореИрдВ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реНрдерд┐рд░ рд╡рд╛рд▓реЗ рдХреЗ рдмрдЬрд╛рдп рдЧреИрд░-рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╡реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (PHPUnit 7.5.6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдХреНрдпрд╛ рдореИ рдЧрд▓рдд рд╣реБ?

рдирд╣реАрдВ, рддреБрдо рд╕рд╣реА рд╣реЛ! рдореЗрд░рд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдЯреАрдХ рдирд╣реАрдВ рдерд╛, рдЗрд╕реЗ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИ:

private static function getDataFromDataProviderAnnotation($allTheParameters): ?iterable
    // code for locating the data provider
    // [...]
                if ($dataProviderMethod->isStatic()) {
                    $object = null;
                } else {
                    $object = $dataProviderClass->newInstance();
                }

    // code for preparing returned data rows
    // [...]
}

рддреЛ рдпрд╣рд╛рдБ рдЧрдВрджрд╛ рдЫреЛрдЯрд╛ рд░рд╣рд╕реНрдп рд╣реИ:

  • рдЖрдк рдЧреИрд░-рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
  • рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ instanceof рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди...
  • рдпрд╣ _рдирд╣реАрдВ рд╡рд╣реА рдЙрджрд╛рд╣рд░рдг_ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд┐рдХреНрд╕реНрдЪрд░ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

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

@MAChitgarha рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд▓рдЧ рд╣реИрдВ: https://github.com/epdenouden/phpunit/blob/4718e0bb470170b2da46bf0e05b7275110a2a29d/tests/_files/DataProviderInstanceTest.php#L14 -L27

image

@epdenouden рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рдЕрд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реА! PHPUnit 7.5.13 рдореЗрдВ, рдЕрднрд┐рдХрдерди рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреИрд╕реЗ рдорд┐рд▓рддреА рд╣реИ? рдкрд┐рдЫрдбрд╝рд╛-рдЕрд╕рдВрдЧрддрд┐, рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ?

рдпрд╣ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ 8.2 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдореИрдВ рдЖрдЧреЗ 7.5.x рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛, рд╣реЗрдб-рдЕрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдХреБрдЫ рдЕрдиреНрдп рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░ рд╕реНрдереИрддрд┐рдХ рдкреНрд░рджрд╛рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рдереЗ рдФрд░ рд╕рдЯреАрдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ: рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ :)

рдФрд░ @MAChitgarha рд╣рд╛рдБ рдпрд╣ рдПрдХ рдмреАрд╕реА-рдмреНрд░реЗрдХ рд╣реЛрдЧрд╛

@epdenouden рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдореИрдВ PHPUnit 7.5.13 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ; рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА 8.2.* рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ, рдЕрдЧрд░ рдмреАрд╕реА-рдмреНрд░реЗрдХ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ PHPUnit рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдиреЗ рдХреНрдпрд╛ рдмрджрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕рдм рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ! :)

рдФрд░ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ, рдЕрдЧрд░ рдмреАрд╕реА-рдмреНрд░реЗрдХ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ PHPUnit рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдиреЗ рдХреНрдпрд╛ рдмрджрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕рдм рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ! :)

рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рдмрд┐рдирд╛ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрддрддрд╛ рдмреНрд░реЗрдХ рдкреЗрд╢ рдХрд░рдирд╛ рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ

рддреЛ рд╣рд╛рдБ, рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛/рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдмрд╕ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реНрд╡рдпрдВрд╕реЗрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреВрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдордЬреЗрджрд╛рд░ рддрдереНрдп: рдЙрдкрд░реЛрдХреНрдд рдкрд░реАрдХреНрд╖рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ 7.x рдФрд░ 8.x рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ JIT рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

рдЬрд┐рд╕ рдХреЛрдб рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЕрднреА рднреА рдореВрд▓ рдХреЛрдб рдкреНрд░рд╡рд╛рд╣ рдХреА рддрд░рд╣ рд╣реИред рддреЛ рдпрд╣ рдПрдХ рдмрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рдЕрднреА рднреА рддрд░реНрдХ рдореБрдЭреЗ рдЕрднреА рднреА рдЖрдЧреЗ рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд┐рдореНрди рд╕реНрддрд░ рдФрд░ PHP рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдореБрдЭреЗ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╛ рд╢рд╛рдпрдж рдореЗрд░реЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдХреБрдЫ рдмреЗрд╡рдХреВрдл рдкрд░реАрдХреНрд╖рдгред рдореИрдВ

@epdenouden рдЬреЗрдЖрдИрдЯреА? рдХреНрдпрд╛ рдЖрдк PHP рдХреЗ рд▓рд┐рдП рдЬреЗрдЖрдИрдЯреА рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛? рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБ; рдХреНрдпрд╛ рдЖрдк PHP7.x рдФрд░ PHP8.x рдпрд╛ PHPUnit7.x рдФрд░ PHPUnit8.x рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ ?!

@epdenouden рдЬреЗрдЖрдИрдЯреА? рдХреНрдпрд╛ рдЖрдк PHP рдХреЗ рд▓рд┐рдП рдЬреЗрдЖрдИрдЯреА рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛? рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБ; рдХреНрдпрд╛ рдЖрдк PHP7.x рдФрд░ PHP8.x рдпрд╛ PHPUnit7.x рдФрд░ PHPUnit8.x рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ ?!

@MAChitgarha рдореИрдВ рдЖрдкрдХреЗ рднреНрд░рдо рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ PHP8 рдХреЛ рдЬрд╕реНрдЯ-рдЗрди-рдЯрд╛рдЗрдо _compiler_ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдирдП рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: рдПрдХ рдЬрд╕реНрдЯ-рдЗрди-рдЯрд╛рдЗрдо _loader_ рдЙрд░реНрдл тАЛтАЛрдЖрд▓рд╕реА-рд▓реЛрдбрд┐рдВрдЧред рдХреЗрд╡рд▓ рд╡рд╣реА рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдм рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

рдпрд╣ рдЖрдЧрд╛рдореА PHP рд╕рдВрд╕реНрдХрд░рдг 8 JIT рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ PHP рднрд╛рд╖рд╛ рдХреА рдХрд┐рд╕реА рднреА рдореБрд╢реНрдХрд┐рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕рд╛рд░рд╛ рдХрд╛рдо PHPUnit рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдЯреЗрд╕реНрдЯ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рд░рдирд┐рдВрдЧ рдЗрддреНрдпрд╛рджрд┐ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ред

рдЕрдЧрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЙрд╕ рдХрдо рдХрд┐рдП рдЧрдП GCP рдпрд╛ AWS рдЗрдирд╡реЙрдЗрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдореИрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

stemis picture stemis  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

keradus picture keradus  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sebastianbergmann picture sebastianbergmann  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dciancu picture dciancu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TiMESPLiNTER picture TiMESPLiNTER  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ