Autofixture: рдЬрдЯрд┐рд▓ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдЕрдЧре░ 2018  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AutoFixture/AutoFixture

рдореИрдВ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХреЛ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЧреИрд░-рдорд╛рдореВрд▓реА рдмрд╛рдзрд╛рдПрдВ рд╣реЛрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореИрдВ рдкреНрд░рд╛рдЗрдордирдВрдмрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ int рд▓реЗрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдЗрдо рдирдВрдмрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред

AutoFixture рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд▓рд┐рдЦреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдбрд╛рд▓реЗрдВрдЧреЗ?

  • рдХреНрдпрд╛ рдЖрдк рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЗрдирдЯреНрд╕ рдФрд░ рд▓реВрдк рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рд╛рдЗрдо рди рд╣реЛ (рдпрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рд╛рдЗрдо рдЬреЗрдирд░реЗрдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ)? рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдмрд╛рдзрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдореБрд╢реНрдХрд┐рд▓ рдерд╛, рддреЛ рдпрд╣ рддреЗрдЬреА рд╕реЗ рдорд╣рдВрдЧрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
  • рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕реАрдорд┐рдд рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрдИ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдирдХреЗ рдмреАрдЪ рдХреБрдЫ рд╕рддреНрдпрд╛рдкрди рдХрд░реЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП argA рдХреЗрд╡рд▓ рдореВрд▓реНрдпреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ argB рд╕рддреНрдп рд╣реИ, рдФрд░ argC рдХреЛ argA рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ argC.X рд╕рдВрдкрддреНрддрд┐ рдХреЛ argA.X рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреБрдЫ рд╕рд╛рдорд╛рди рдЬреИрд╕реЗ)ред

рдЖрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?

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

рдФрд░ рдЕрдВрдд рдореЗрдВ (рдореИрдВ рдХрдИ рдореБрджреНрджреЗ рдмрдирд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрд╛ рдХрд┐ рд╡реЗ рд╕рднреА рд╡рд┐рд╖рдп рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╣рд▓реВ рд╣реИрдВ), рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдмрдирд╛рдирд╛ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рднреА рдЙрди рдЕрдиреБрдХреВрд▓рди рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрддрд╛ рд╣реИ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо рдкрд░рд┐рд╡рд░реНрддрди рдмрд╣реБрдд рдХрд╛рдо рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрдХрдиреАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ?

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЧрдиреНрджрд╛ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

рд╢реБрдн рджрд┐рд╡рд╕! рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреНрд░рдХрд╛рд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ - рдмреЗрд╣рдж рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ AutoFixture рдХрд╛ рдореВрд▓ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдзрд╛рдУрдВ рд╡рд╛рд▓реЗ рдЬрдЯрд┐рд▓ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдирд┐рд░реНрдорд╛рдг рд░рдгрдиреАрддрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рд╣реИ:

  • рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдпрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ (рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рддреА рд╣реИ)ред
  • рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рддрд░реНрдХреЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВред
  • рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдФрд░ рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рд╕реЗ рднрд░реЗрдВред

рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рдерд╛, рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдмрд┐рдВрджреБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИрдВ рдФрд░ рдЙрди рдЬрдЯрд┐рд▓ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

AutoFixture рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд▓рд┐рдЦреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдбрд╛рд▓реЗрдВрдЧреЗ?

  • рдХреНрдпрд╛ рдЖрдк рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЗрдирдЯреНрд╕ рдФрд░ рд▓реВрдк рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рд╛рдЗрдо рди рд╣реЛ (рдпрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рд╛рдЗрдо рдЬреЗрдирд░реЗрдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ)? рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдмрд╛рдзрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдореБрд╢реНрдХрд┐рд▓ рдерд╛, рддреЛ рдпрд╣ рддреЗрдЬреА рд╕реЗ рдорд╣рдВрдЧрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

  • рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕реАрдорд┐рдд рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ?

рдЦреИрд░, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдЪрд╛рдВрджреА рдХреА рдЧреЛрд▓реА рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдПрдХрд▓ рдПрд╕рдпреВрдЯреА рдХреЗрд╡рд▓ 1-2 рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░рдирд╛ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЪреБрдирдирд╛ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ElementsBulider<> рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рд╣рд╛рдпрдХ рд╣реИ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП)ред рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдкрдХреЛ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЖрдк рд▓рдВрдмреЗ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЙрдиреНрд╣реЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдХреЛрдб рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрдИ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдирдХреЗ рдмреАрдЪ рдХреБрдЫ рд╕рддреНрдпрд╛рдкрди рдХрд░реЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП argA рдХреЗрд╡рд▓ рдореВрд▓реНрдпреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ argB рд╕рддреНрдп рд╣реИ, рдФрд░ argC рдХреЛ argA рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ argC.X рд╕рдВрдкрддреНрддрд┐ рдХреЛ argA.X рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреБрдЫ рд╕рд╛рдорд╛рди рдЬреИрд╕реЗ)ред

рдЖрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?

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

рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдгрдиреАрддрд┐ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ:

  • рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рднреА рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ, рддреЛ рдЖрдк AutoFixture рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрдЧрдд рд╣реЛ рдЬрд╛рдПред

рдЗрд╕ рддрд░рд╣ рдЖрдк рдЖрдВрддрд░рд┐рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦрдВрдбрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рддрд░реАрдХрд╛ рдмрд╣реБрдд рд╣реА рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИред

рдпрджрд┐ рдЬрдЯрд┐рд▓ рдмрд╛рдзрд╛рдУрдВ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЗ рдЗрддрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореМрдЬреВрджрд╛ рдХреНрд╖рдорддрд╛рдПрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХрд╛ рдбреЛрдореЗрди рдореЙрдбрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ, рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ AutoFixture рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЯреВрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж, рдмрд╛рдЬрд╛рд░ рдкрд░ рдмреЗрд╣рддрд░ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ AutoFixture рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рд╣реИ рдФрд░ рдЖрдк рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк AutoFixture рдХреЛрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣рдореЗрд╢рд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ DSL рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ... рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рддрд░реАрдХрд╛ рд╕рд╕реНрддрд╛ рд╣реИ

рдЖрдЗрдП @ploeh рд╕реЗ рдЙрдирдХреЗ рд╡рд┐рдЪрд╛рд░ рднреА рдкреВрдЫреЗрдВред рдЖрдорддреМрд░ рдкрд░ рдорд╛рд░реНрдХ рдХреЗ рдЙрддреНрддрд░ рдЧрд╣рд░реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд╣рд▓реЗ рдореВрд▓ рдХрд╛рд░рдг рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдФрд░ рдкреНрд░рд╢реНрди рд╣реИрдВ - рдХреГрдкрдпрд╛ рдкреВрдЫреЗрдВ! рдЙрдирдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╣рдореЗрд╢рд╛ рд╕реНрд╡рд╛рдЧрдд рд░рд╣реЗрдЧрд╛ред

рдкреАрдПрд╕ рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдПрдХ рдирдореВрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА (рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд░рд▓ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ):


рд╕реЛрд░реНрд╕ рдХреЛрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

```рд╕реА#
рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
AutoFixture.Xunit2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Xunit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;

рдиреЗрдорд╕реНрдкреЗрд╕ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧ
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдмреВрд▓ IsPrime (int рд╕рдВрдЦреНрдпрд╛)
{
// https://stackoverflow.com/a/15743238/2009373 рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛

        if (number <= 1) return false;
        if (number == 2) return true;
        if (number % 2 == 0) return false;

        var boundary = (int) Math.Floor(Math.Sqrt(number));

        for (int i = 3; i <= boundary; i += 2)
        {
            if (number % i == 0) return false;
        }

        return true;
    }
}

public class DepA
{
    public int Value { get; set; }
}

public class DepB
{
    public int PrimeNumber { get; }
    public int AnyOtherValue { get; }

    public DepB(int primeNumber, int anyOtherValue)
    {
        if (!Util.IsPrime(primeNumber))
            throw new ArgumentOutOfRangeException(nameof(primeNumber), primeNumber, "Number is not prime.");

        PrimeNumber = primeNumber;
        AnyOtherValue = anyOtherValue;
    }
}

public class DepC
{
    public DepA DepA { get; }
    public DepB DepB { get; }

    public DepC(DepA depA, DepB depB)
    {
        if (depB.PrimeNumber < depA.Value)
            throw new ArgumentException("Second should be larger than first.");

        DepA = depA;
        DepB = depB;
    }

    public int GetPrimeNumber() => DepB.PrimeNumber;
}

public class Issue1067
{
    [Theory, CustomAutoData]
    public void ShouldReturnPrimeNumberFromDepB(DepC sut)
    {
        var result = sut.GetPrimeNumber();

        Assert.Equal(sut.DepB.PrimeNumber, result);
    }
}

public class CustomAutoData : AutoDataAttribute
{
    public CustomAutoData() : base(() =>
    {
        var fixture = new Fixture();

        // Add prime numbers generator, returning numbers from the predefined list
        fixture.Customizations.Add(new ElementsBuilder<PrimeNumber>(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41));

        // Customize DepB to pass prime numbers only to ctor
        fixture.Customize<DepB>(c => c.FromFactory((PrimeNumber pn, int anyNumber) => new DepB(pn, anyNumber)));

        // Customize DepC, so that depA.Value is always less than depB.PrimeNumber
        fixture.Customize<DepC>(c => c.FromFactory((DepA depA, DepB depB, byte diff) =>
        {
            depA.Value = depB.PrimeNumber - diff;
            return new DepC(depA, depB);
        }));

        return fixture;
    })
    {
    }
}

/// <summary>
/// A helper type to represent a prime number, so that you can resolve prime numbers 
/// </summary>
public readonly struct PrimeNumber
{
    public int Value { get; }

    public PrimeNumber(int value)
    {
        Value = value;
    }

    public static implicit operator int(PrimeNumber prime) => prime.Value;
    public static implicit operator PrimeNumber(int value) => new PrimeNumber(value);
}

}
```

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

рд░реЗрдбрд┐рдпреЛ рдЪреБрдкреНрдкреА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рд╣рдо рдЬреАрд╡рд┐рдд рд╣реИрдВ рдФрд░ рдореИрдВ рдЬрд▓реНрдж рд╣реА рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ - рдореИрдВ рдЗрди рджрд┐рдиреЛрдВ рдЕрдкрдиреЗ рдкреНрд░рд╛рдердорд┐рдХ рдХрд╛рдо рдореЗрдВ рдмреЗрд╣рдж рд╡реНрдпрд╕реНрдд рд╣реВрдВред NSubstitute v4 рд░рд┐рд▓реАрдЬрд╝ рдкрд░ рднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдордп рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрди рд╣реИ: рдЧрд╣рди: рдкреНрд░рд╢реНрди рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрддреНрддрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдзреИрд░реНрдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдзреБрди рдмрдирд╛рдП рд░рдЦреЗрдВ :рдкрд▓рдХ:

рдирдорд╕реНрддреЗ,
рдЙрд╕ рдкрд░ рдХреЛрдИ рдЦрдмрд░?
рдХреЛрдИ рджрдмрд╛рд╡ рдирд╣реАрдВ (рдореБрдЭреЗ рдбреНрд░рд┐рд▓ рдкрддрд╛ рд╣реИ , рд╕рд╛рде рд╣реА рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рд╢рд┐рдХреНрд╖рд┐рдд рд╕рд▓рд╛рд╣ рдЪрд╛рд╣рд┐рдП), рдпрд╣ рд╕рд┐рд░реНрдл рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рджреГрд╢реНрдпрддрд╛ рд╣реИред
рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рд╢реБрдн рджрд┐рд╡рд╕! рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреНрд░рдХрд╛рд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ - рдмреЗрд╣рдж рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ AutoFixture рдХрд╛ рдореВрд▓ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдзрд╛рдУрдВ рд╡рд╛рд▓реЗ рдЬрдЯрд┐рд▓ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдирд┐рд░реНрдорд╛рдг рд░рдгрдиреАрддрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рд╣реИ:

  • рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдпрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ (рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рддреА рд╣реИ)ред
  • рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рддрд░реНрдХреЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВред
  • рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдФрд░ рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рд╕реЗ рднрд░реЗрдВред

рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рдерд╛, рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдмрд┐рдВрджреБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИрдВ рдФрд░ рдЙрди рдЬрдЯрд┐рд▓ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

AutoFixture рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд▓рд┐рдЦреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдбрд╛рд▓реЗрдВрдЧреЗ?

  • рдХреНрдпрд╛ рдЖрдк рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЗрдирдЯреНрд╕ рдФрд░ рд▓реВрдк рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рд╛рдЗрдо рди рд╣реЛ (рдпрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рд╛рдЗрдо рдЬреЗрдирд░реЗрдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ)? рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдмрд╛рдзрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдореБрд╢реНрдХрд┐рд▓ рдерд╛, рддреЛ рдпрд╣ рддреЗрдЬреА рд╕реЗ рдорд╣рдВрдЧрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

  • рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕реАрдорд┐рдд рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ?

рдЦреИрд░, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдЪрд╛рдВрджреА рдХреА рдЧреЛрд▓реА рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдПрдХрд▓ рдПрд╕рдпреВрдЯреА рдХреЗрд╡рд▓ 1-2 рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░рдирд╛ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЪреБрдирдирд╛ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ElementsBulider<> рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рд╣рд╛рдпрдХ рд╣реИ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП)ред рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдкрдХреЛ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЖрдк рд▓рдВрдмреЗ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЙрдиреНрд╣реЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдХреЛрдб рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрдИ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдирдХреЗ рдмреАрдЪ рдХреБрдЫ рд╕рддреНрдпрд╛рдкрди рдХрд░реЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП argA рдХреЗрд╡рд▓ рдореВрд▓реНрдпреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ argB рд╕рддреНрдп рд╣реИ, рдФрд░ argC рдХреЛ argA рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ argC.X рд╕рдВрдкрддреНрддрд┐ рдХреЛ argA.X рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреБрдЫ рд╕рд╛рдорд╛рди рдЬреИрд╕реЗ)ред

рдЖрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?

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

рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдгрдиреАрддрд┐ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ:

  • рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рднреА рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ, рддреЛ рдЖрдк AutoFixture рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрдЧрдд рд╣реЛ рдЬрд╛рдПред

рдЗрд╕ рддрд░рд╣ рдЖрдк рдЖрдВрддрд░рд┐рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦрдВрдбрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рддрд░реАрдХрд╛ рдмрд╣реБрдд рд╣реА рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИред

рдпрджрд┐ рдЬрдЯрд┐рд▓ рдмрд╛рдзрд╛рдУрдВ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЗ рдЗрддрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореМрдЬреВрджрд╛ рдХреНрд╖рдорддрд╛рдПрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХрд╛ рдбреЛрдореЗрди рдореЙрдбрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ, рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ AutoFixture рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЯреВрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж, рдмрд╛рдЬрд╛рд░ рдкрд░ рдмреЗрд╣рддрд░ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ AutoFixture рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рд╣реИ рдФрд░ рдЖрдк рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк AutoFixture рдХреЛрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣рдореЗрд╢рд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ DSL рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ... рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рддрд░реАрдХрд╛ рд╕рд╕реНрддрд╛ рд╣реИ

рдЖрдЗрдП @ploeh рд╕реЗ рдЙрдирдХреЗ рд╡рд┐рдЪрд╛рд░ рднреА рдкреВрдЫреЗрдВред рдЖрдорддреМрд░ рдкрд░ рдорд╛рд░реНрдХ рдХреЗ рдЙрддреНрддрд░ рдЧрд╣рд░реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд╣рд▓реЗ рдореВрд▓ рдХрд╛рд░рдг рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдФрд░ рдкреНрд░рд╢реНрди рд╣реИрдВ - рдХреГрдкрдпрд╛ рдкреВрдЫреЗрдВ! рдЙрдирдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╣рдореЗрд╢рд╛ рд╕реНрд╡рд╛рдЧрдд рд░рд╣реЗрдЧрд╛ред

рдкреАрдПрд╕ рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдПрдХ рдирдореВрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА (рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд░рд▓ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ):


рд╕реЛрд░реНрд╕ рдХреЛрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

```рд╕реА#
рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
AutoFixture.Xunit2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Xunit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;

рдиреЗрдорд╕реНрдкреЗрд╕ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧ
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдмреВрд▓ IsPrime (int рд╕рдВрдЦреНрдпрд╛)
{
// https://stackoverflow.com/a/15743238/2009373 рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛

        if (number <= 1) return false;
        if (number == 2) return true;
        if (number % 2 == 0) return false;

        var boundary = (int) Math.Floor(Math.Sqrt(number));

        for (int i = 3; i <= boundary; i += 2)
        {
            if (number % i == 0) return false;
        }

        return true;
    }
}

public class DepA
{
    public int Value { get; set; }
}

public class DepB
{
    public int PrimeNumber { get; }
    public int AnyOtherValue { get; }

    public DepB(int primeNumber, int anyOtherValue)
    {
        if (!Util.IsPrime(primeNumber))
            throw new ArgumentOutOfRangeException(nameof(primeNumber), primeNumber, "Number is not prime.");

        PrimeNumber = primeNumber;
        AnyOtherValue = anyOtherValue;
    }
}

public class DepC
{
    public DepA DepA { get; }
    public DepB DepB { get; }

    public DepC(DepA depA, DepB depB)
    {
        if (depB.PrimeNumber < depA.Value)
            throw new ArgumentException("Second should be larger than first.");

        DepA = depA;
        DepB = depB;
    }

    public int GetPrimeNumber() => DepB.PrimeNumber;
}

public class Issue1067
{
    [Theory, CustomAutoData]
    public void ShouldReturnPrimeNumberFromDepB(DepC sut)
    {
        var result = sut.GetPrimeNumber();

        Assert.Equal(sut.DepB.PrimeNumber, result);
    }
}

public class CustomAutoData : AutoDataAttribute
{
    public CustomAutoData() : base(() =>
    {
        var fixture = new Fixture();

        // Add prime numbers generator, returning numbers from the predefined list
        fixture.Customizations.Add(new ElementsBuilder<PrimeNumber>(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41));

        // Customize DepB to pass prime numbers only to ctor
        fixture.Customize<DepB>(c => c.FromFactory((PrimeNumber pn, int anyNumber) => new DepB(pn, anyNumber)));

        // Customize DepC, so that depA.Value is always less than depB.PrimeNumber
        fixture.Customize<DepC>(c => c.FromFactory((DepA depA, DepB depB, byte diff) =>
        {
            depA.Value = depB.PrimeNumber - diff;
            return new DepC(depA, depB);
        }));

        return fixture;
    })
    {
    }
}

/// <summary>
/// A helper type to represent a prime number, so that you can resolve prime numbers 
/// </summary>
public readonly struct PrimeNumber
{
    public int Value { get; }

    public PrimeNumber(int value)
    {
        Value = value;
    }

    public static implicit operator int(PrimeNumber prime) => prime.Value;
    public static implicit operator PrimeNumber(int value) => new PrimeNumber(value);
}

}
```

рдирдорд╕реНрддреЗ @zvirja

рд╡рд╛рд╣, рд╡рд┐рд╕реНрддреГрдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдореБрдЭреЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ рдФрд░ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

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

рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж, рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЛ!

AutoFixture рдФрд░ рд╕рдВрдкрддреНрддрд┐-рдЖрдзрд╛рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:

  • рдЫрдирди
  • рдПрд▓реНрдЧреЛрд░рд┐рдердо рдирд┐рд░реНрдорд╛рдг

(рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдореЗрд░рд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдХреНрд░рдорд╢рдГ _catamorphisms_ рдФрд░ _anamorphisms_ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рддрд░рдл рдЬреНрдпрд╛рджрд╛рддрд░ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдиреЛрдЯ рд╣реИред)

рдпрджрд┐ _most_ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдорд╛рди рдХрд┐рд╕реА рднреА рдмрд╛рдзрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдлрд┐рдЯ рд╣реЛрдВрдЧреЗ, рддреЛ рдореМрдЬреВрджрд╛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЕрдиреБрдкрдпреБрдХреНрдд рдореВрд▓реНрдп рдХреЛ рдлреЗрдВрдХрдирд╛, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐, рджреВрд╕рд░реА рдУрд░, рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╢рд╛рдпрдж рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рдорд╛рдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдРрд╕реЗ рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬреЛ рдкреНрд░рд╢реНрди рдореЗрдВ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдлрд┐рдЯ рдХрд░рддреЗ рд╣реИрдВред

рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ FsCheck рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдХреБрдЫ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддреЗ рд╣реБрдП рдПрдХ рд╡рд╛рд░реНрддрд╛ рджреА рдереАред рдпрд╣ рдкреНрд░рд╕реНрддреБрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдРрд╕реА рдмрд╛рдд рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИ рдЬрд┐рд╕рдиреЗ рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рд┐рд░реНрдл рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХреЗ рд╕рд╛рдеред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрд╕ рд╡рд╛рд░реНрддрд╛ рдХреА рдХреЛрдИ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рдХреЛрдИ рднреА рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рдПрд▓реНрдЧреЛрд░рд┐рдердо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рдЪрд▓рдиреА рдХреА рддрд░рд╣ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдореЗрдВ рд╕реАрдорд┐рдд рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рд╕рдордЧреНрд░ рдкреНрд░рд╢реНрди рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдЬрдм рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рддрдм рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрднреА рднреА рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ: http://blog.ploeh.dk/2009/ 05/01/рдбреАрд▓рд┐рдВрдЧ рд╡рд┐рде рд╡рд┐рд╡рд╢ рдЗрдирдкреБрдЯ

рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреЗрдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдкреНрд░рд╢реНрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╢реНрди рдЕрдХреНрд╕рд░ XY рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭ рд▓реЗрддрд╛ рд╣реВрдВ, рддреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдбрд┐рдЬрд╛рдЗрди рди рдХреЗрд╡рд▓ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдЖрдзрд╛рд░ рднреАред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ XY рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрднреА рднреА рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдПрдХ рд╡реИрдз рдЪрд┐рдВрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╕-рджрд░-рдорд╛рдорд▓рд╛ рдЖрдзрд╛рд░ рдкрд░ рдЙрдирд╕реЗ рдирд┐рдкрдЯреВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рд╡реЗ рд╣реИрдВ рджреБрд░реНрд▓рднред

рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рддреЛ рдореИрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди рдХрд╛ рдЕрд░реНрдердкреВрд░реНрдг рдЙрддреНрддрд░ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред

@ploeh рдЗрд╕ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдЬреЛ рдЙрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛ (рдФрд░ рдЖрдкрдиреЗ рдореБрдЭреЗ рдХреИрдЯрд╛- рдФрд░ рдПрдирд╛рдореЛрд░реНрдлрд┐рдЬреНрдо ЁЯШГ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рдмрдирд╛ рджрд┐рдпрд╛)ред
рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЕрдиреНрдпреЛрдиреНрдпрд╛рд╢реНрд░рд┐рдд рдореВрд▓реНрдп рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ XY рд╕рдорд╕реНрдпрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ), рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╡рд┐рд░рд╛рд╕рдд (рдЕрд╡рд╛рдВрдЫрд┐рдд ) рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрди рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рдереА, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рд░рд┐рдлрд▓реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордпред

рд╡реИрд╕реЗ рднреА, рдЖрдкрдХреЗ рджреЛрдиреЛрдВ рдЙрддреНрддрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд╣рд╛рдВ рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реВрдВред
рдзрдиреНрдпрд╡рд╛рдж!

рдмреАрдЯреАрдбрдмреНрд▓реВ, рдореИрдВ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдореЗрд░рд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ @zvirja рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрд░рд╛ рдЙрддреНрддрд░ рдерд╛ред рдпрд╣ рд╡рд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдЪреНрдЫрд╛ рдЬрд╡рд╛рдм рд╣реИ

рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛

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