Autofixture: NCrunch рдФрд░ AutoFixture рдПрдХреАрдХрд░рдг рдореБрджреНрджреЗ

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

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

рдореИрдВ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдПрдХ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдирдХреНрд░рдВрдЪ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣рд╛рдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рд╢рд╛рдпрдж, рд╣рдо рдЗрд╕реЗ xUnit рд╕рддрд╣ рдкрд░ рдФрд░ рдЖрдЧреЗ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдореЗрдВ рдПрдирдХреНрд░рдВрдЪ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рджреЛрдиреЛрдВ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрддреНрдкрд╛рдж рд╣реИрдВ

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

@remcomulder @zvirja рдмрд╕ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ (рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХреА), рдФрд░ рдЖрдкрдиреЗ рдпрд╣рд╛рдВ рдЬреЛ рд╕рдорд░реНрдкрдг рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рд╡рд╣ рдХрдорд╛рд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ! рдЖрдкрдХреЗ рдорд╣рд╛рди рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рджред

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

рдирдорд╕реНрддреЗ, рдореИрдВ рдПрдирдХреНрд░рдВрдЪ рдХрд╛ рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред

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

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

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

@remcomulder рдпрд╣рд╛рдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж - рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд╛рд╣рдирд╛! рдореИрдВрдиреЗ рдЗрд╕рдХреА рдереЛрдбрд╝реА рдЬрд╛рдВрдЪ рдХреА рд╣реИ рдФрд░ рдЕрдкрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореЗрд░реЗ рд╕рднреА рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗрд╡рд▓ xUnit рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

TL DR: xUnit рдРрд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ NCrunch рдХреЛ xUnit рдХреЗ рд▓рд┐рдП рднреА рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдирдпреВрдиреАрдЯ рдХреЗ рд▓рд┐рдП - рдпрд╣ рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рд╣реИред


рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛ xUnit рдХреЗ рд▓рд┐рдП _legal_ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ TestDataDiscoverer рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдкреВрд░реНрд╡-рдЦреЛрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ)ред рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕ рдЦреЛрдЬрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЦреЛрдЬ рдХреЗ рджреМрд░рд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдиреЛрдВ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореЗрд░рд╛ рдзрд╛рд╡рдХ рд╕рдВрднрд╡рддрдГ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдиреЗ рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ рдФрд░ рдРрд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рде R# рдФрд░ VS рджреЛрдиреЛрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЗрд╕рдореЗрдВ рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯреЗрдб рдбреЗрдЯрд╛ рд╣реЛред рдореИрдВ рд╡реАрдПрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЦреЛрдЬ рдФрд░ рд░рди рдЪрд░рдг рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдпрд╣ рдУрдкрди-рд╕реЛрд░реНрд╕ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

using Ploeh.AutoFixture.Xunit2;
using Xunit;

namespace Playground
{
    public class UnitTest
    {
        [Fact]
        public void StableTest()
        {
            Assert.True(true);
        }

        [Theory]
        [InlineData(1)]
        public void StableInlineTest(int value)
        {
            Assert.Equal(1, value);
        }

        [Theory, AutoData]
        public void VolatileTest(int value)
        {
            Assert.True(value % 2 == 0);
        }

        [Theory]
        [InlineAutoData(10)]
        [InlineAutoData(20)]
        [InlineAutoData(30)]
        public void VolatileTestWithInline(int value, int autoValue)
        {
            Assert.NotEqual(value, 40);
        }
    }
}

.NET Framework рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдпреЛрдЬрдирд╛ред рд╡реАрдПрд╕ 2017.3ред рд▓рдХреНрд╖реНрдп рдврд╛рдВрдЪрд╛: 4.5.2ред рд╕реНрдерд╛рдкрд┐рдд рдкреИрдХреЗрдЬ:

  • xunit 2.2.0
  • xunit.runner.visualstudio 2.2.0
  • AutoFixture 3.50.6
  • AutoFixture.Xunit2 3.50.6

рдпрджрд┐ рдЖрдк рд╡реАрдПрд╕ рдореЗрдВ рдЦреЛрдЬ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВрдЧреЗ:
image

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдЦреЛрдЬ ( StableInlineTest ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡реАрдПрд╕ рд░рдирд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ ( 1 )ред рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдбреЗрдЯрд╛ рдЦреЛрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд┐рдирдореЗрдВ рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯреЗрдб рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ ( VolatileTest , VolatileTestWithInline ) VS рдереНрдпреЛрд░реА рдорд╛рдорд▓реЛрдВ рдХреА рдЦреЛрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рдВрдкреВрд░реНрдг рд╕рд┐рджреНрдзрд╛рдВрдд рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рджреМрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА, рдЖрдк рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЖрд╣реНрд╡рд╛рди рдХреЗ рд▓рд┐рдП рдорд╛рди рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ:
image

рдЕрдм рдЖрдк рд╡рд┐рд╢реЗрд╖ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ _рд╕рднреА рд╕рд┐рджреНрдзрд╛рдВрдд рдорд╛рдорд▓реЛрдВ_ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ xUnit рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдПрдирдХреНрд░рдВрдЪ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреБрдЫ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдорд╛рдорд▓реЛрдВ рдХреА рдкреВрд░реНрд╡-рдЦреЛрдЬ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдРрд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рдмрдЬрд╛рдп рдкреВрд░реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреАрдврд╝реА рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рдиреЛрдВ (рдпрд╛рдиреА рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдпрд╛ рдХреЙрдиреНрд╕реНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ xUnit рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо рдмрджрд▓рдиреЗ рдФрд░ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП API рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рд╣реИ ( рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреНрд░реИрдб рдХрд╛ рдЬрд╡рд╛рдм рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╕рддреНрдп рд╣реИ рдФрд░ рд╡реЗ рдХреЗрд╡рд▓ рдЙрд╕ рдЦреЛрдЬ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпрд╛ рдЕрдиреНрдпрдерд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдиреЛрдВ рдХреА рд╕реАрдбрд┐рдВрдЧ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реА рд╕реАрдорд┐рдд рдХрд░реЗрдВред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдХ рд╕рд┐рдВрдЧ рд╕реАрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╕рджрд╕реНрдп рдбреЗрдЯрд╛

рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдирдореВрдирд╛ рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕реЗ XUnit рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рд╣реИ):

public class MemberDataSample
{
    public IEnumerable<object[]> GetData()
    {
        yield return new object[]
        {
            DateTime.Now
        };
    }

    [Theory, MemberData(nameof(GetData), DisableDiscoveryEnumeration = true)]
    public void DateTheory(DateTime dt)
    {
        Assert.True(DateTime.Now - dt < TimeSpan.FromMinutes(1));
    }
}

рдпрд╣ xUnit рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдХрд╛рдиреВрдиреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ DisableDiscoveryEnumeration рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдпрд╣ рдКрдкрд░ рдХреЗ рдирдореВрдиреЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреА рдкреВрд░реНрд╡-рдЦреЛрдЬ рдирд╣реАрдВ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред


рддрд▓ - рд░реЗрдЦрд╛

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ xUnit рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдЕрд╕реНрдерд┐рд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдкреВрд░реНрд╡-рдЦреЛрдЬ рдЧрдгрдирд╛ рд╕рдорд░реНрдерди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред рдЖрдк рд╡реАрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдХ рдирдореВрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдЙрддреНрдкрд╛рдж рдореЗрдВ рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрднрд╡рддрдГ, рд╡реЗ рдмрд╕ xUnit SDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рд╕рдВрджреЗрд╢ рд╕рд┐рдВрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

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

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдЖрдкрд╕реЗ рдорд╛рдлреА рдорд╛рдВрдЧ рд╕рдХрддрд╛ рд╣реВрдВред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдПрдирд╕реАрдЖрд░рдВрдЪ рдХреЗ рддрд╣рдд рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред Xunit рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рд╕реЗ рдмрдЪ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдПрдХрд▓ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдврд╣рд╛ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░, рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдирдХреНрд░рдВрдЪ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ InlineAutoData рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

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

рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдирдХреНрд░рдВрдЪ рдФрд░ рд╡реАрдПрд╕ рд░рдирд░ рджреЛрдиреЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ ReSharper рдФрд░ TD.NET рдХреЛ рднреА рддреЛрдбрд╝ рджреЗрдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдЗрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:

using Ploeh.AutoFixture;
using Ploeh.AutoFixture.Xunit2;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit;

namespace XUnitAutoFixture
{
    public class TestFixture
    {
        private static readonly Fixture Fixture = new Fixture();

        public static IEnumerable<object[]> SomeTestData()
        {
            yield return new object[] { Fixture.Create<string>() };
            yield return new object[] { Fixture.Create<string>() };
        }

        [Theory, MemberData(nameof(SomeTestData))]
        public void Test(object value)
        {

        }
    }
}

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

рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?

рдЕрдм рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░, рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдирдХреНрд░рдВрдЪ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рджрдо рдмрдврд╝рд┐рдпрд╛! рдпрд╣ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ xUnit рдкреВрд░реА рддрд░рд╣ рд╕реЗ NCrunch рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛNUnit рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ - рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реЗ рд╣реА рдЕрдирд╛рдбрд╝реА рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдРрд╕рд╛ рдХреНрдпрд╛? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ xUnit рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ?


рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдирдХреНрд░рдВрдЪ рдФрд░ рд╡реАрдПрд╕ рд░рдирд░ рджреЛрдиреЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред
рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?

рд╣рд╛рдВ, рд╡рд╣ рдкрд░рд┐рджреГрд╢реНрдп рд╕рднреА рдзрд╛рд╡рдХреЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЗ рдлрд╝реЛрд░рдо рдкрд░ рдХрд╣реАрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ AutoFixture рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:

public class TestFixture
{
    public static IEnumerable<object[]> SomeTestData()
    {
        yield return new object[] { DateTime.Now.Ticks };
        yield return new object[] { DateTime.Now.Ticks };
    }

    [Theory, MemberData(nameof(SomeTestData))]
    public void Test(object value)
    {

    }
}

рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрдкрдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ рдХрд┐ рдЖрдк рдкреВрд░реНрд╡-рдЦреЛрдЬ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗ ( DisableDiscoveryEnumeration рд╕рдВрдкрддреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ):

public class TestFixture
{
    private static readonly Fixture Fixture = new Fixture();

    public static IEnumerable<object[]> SomeTestData()
    {
        yield return new object[] { Fixture.Create<string>() };
        yield return new object[] { Fixture.Create<string>() };
    }

    [Theory, MemberData(nameof(SomeTestData), DisableDiscoveryEnumeration = true)]
    public void Test(object value)
    {

    }
}

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

рдореИрдВ NCrunch рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рд▓реЗ рдЬрд╛рдКрдБрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣рдо рдпрд╣рд╛рдВ рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛ рдбрд╛рд▓реЗрдВ рдФрд░ рд▓реЛрдЧреЛрдВ рд╕реЗ xUnit рдХрд╛ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реЛрдВрдЧреЗ)ред


рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк AutoFixture рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЙрд╕ рдореЛрдб рдХреЛ xUnit рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (NUnit рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ)ред рдпрд╣ рднреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреГрд╖реНрда рдХреЛ рднреА рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

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

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

рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ! рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реИ рдФрд░ рд╣рдо рд╕рдм рдпрд╣рд╛рдВ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ ЁЯШЕ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдХрдЯ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдФрд░ рд╣рдордиреЗ рдЙрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА - рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ

рдореИрдВрдиреЗ рдЖрдкрд╕реЗ рдЬреЛ рд╕реАрдЦрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде, рдореИрдВ рдПрдирдХреНрд░рдВрдЪ рд╕реЗ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред

рдЦреИрд░, рд╣рдореЗрдВ рдЕрднреА рднреА NUnit рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рдиреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИрдВ), рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрджреЗрд╢ NUnit рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдпрдж, рдпрд╣ рдХреЗрд╡рд▓ xUnit рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо NUnit рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рд╕рдорд░реНрдерди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛) рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рддреЗред

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдХ рдмрд╛рдд рд╣реИ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рдЬреИрд╕реЗ AutoFixture рдФрд░ NUnit? рд╣рд╛рдВ, рд╣рд░ рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд╛рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЗрдВрдЬрди рдореЛрдб рдРрд╕рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)? рдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрдирдХреЗ рд▓рд┐рдП "рдХреЗрд╡рд▓ рдкреНрд░рднрд╛рд╡рд┐рдд" рдЗрдВрдЬрди рдХрд╛ рдЕрдзрд┐рдХ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ? рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ No support рдХрд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЬрд┐рдирдХрд╛ рд╣рдо рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдмрд╛рдХреА рдХреЛ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

'рдкреНрд░рднрд╛рд╡рд┐рдд рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдПрдВ, рдЕрдиреНрдп рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ'

рдореИрдВ рдЕрдкрдиреЗ 3.10.0.20 рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдкрд░ рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рдпрд╛ред рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм Only consider tests 'Out of date' if they are 'Impacted' рд╕реЗрдЯрд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕реЗ true рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдЕрдЧрд░ рдореБрдЭреЗ рд╡рд╣ рдХрд╣реАрдВ рдпрд╛рдж рдЖрдпрд╛ - рдореИрдВ рдЗрд╕ рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдирдпрд╛ рд╣реВрдБ ..


рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЕрджреНрдпрддрди

рд╢рд╛рдпрдж рдЗрд╕ рдкреГрд╖реНрда рд╕реЗ xUnit рдФрд░ AutoFixture рдХреЗ рд╕рд╛рде _remove_ рдорд╛рдорд▓реЗ рдХреЛ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ ( DisableDiscoveryEnumeration рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ XUnit рдХреЗ рд▓рд┐рдП "NUnit рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рдирд╛рдо" рдирдореВрдирд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдВрдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛ рд╣реЛрдЧрд╛ DisableDiscoveryEnumeration рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖рддрд╛ MemberDataAttribute ред

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

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

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

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

рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, NCrunch рдХреЛ рдХрдИ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИрдВред рдПрдирдпреВрдиреАрдЯ рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдРрд╕реЗ рд╣реИрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЦреЛрдЬ рдЪрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рджреЛ рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЕрд╕реНрдерд┐рд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реЗрдЯ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдкреВрд░реА рдорд╛рд╕реНрдЯрд░ рд╕реВрдЪреА рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╡рд┐рддрд░рд┐рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рдорд╕реНрдпрд╛ рднреА рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреВрд░рд╕реНрде рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдЪрд▓ рд░рд╣реА рд╣реИред

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

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

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

рдореИрдВ рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдЕрдкрдиреЗ 3.10.0.20 рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкрд░ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛ рд░рд╣рд╛ рдерд╛ред рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ 'рдЖрдЙрдЯ рдСрдл рдбреЗрдЯ' рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдпрджрд┐ рд╡реЗ 'рдкреНрд░рднрд╛рд╡рд┐рдд' рд╕реЗрдЯрд┐рдВрдЧ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдЕрдЧрд░ рдореБрдЭреЗ рд╡рд╣ рдХрд╣реАрдВ рдпрд╛рдж рдЖрдпрд╛ - рдореИрдВ рдЗрд╕ рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдирдпрд╛ рд╣реВрдБ ..

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

@remcomulder рд╡рд╛рд╣! рдЗрддрдиреА рд╡рд┐рд╕реНрддреГрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЕрдм рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд╣рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ AutoFixture рдФрд░ NUnit рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣реБрдб рдХреЗ рддрд╣рдд рдХреБрдЫ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ

рдореИрдВ рдЕрдм рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЕрд╕реНрдерд┐рд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд▓рдЧрд╛рддрд╛рд░ рд╕реАрдбрд┐рдВрдЧ рдХрд░рдирд╛ рд╣реИред

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

    [Test, StableNameAutoData]
    public void Sample(int a, Data d1, DataWithToString d2, ISomeData d3)
    {
        Assert.IsTrue(true);
    }

рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛:

NUnit3RunnerTest709.TestNameTester.Sample(auto<System.Int32>,auto<NUnit3RunnerTest709.Data>,auto<NUnit3RunnerTest709.DataWithToString>,auto<Castle.Proxies.ISomeDataProxy>)

рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрдЬ/рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдирд╛рдо рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд░рд╣реЗрдЧрд╛, рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рдорд╛рди рд╣рд░ рдмрд╛рд░ рднрд┐рдиреНрди рд╣реЛрдВрдЧреЗред

NUnit рдХреЗ рдЖрдкрдХреЗ рдЧрд╣рди рдЬреНрдЮрд╛рди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ? рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рд░рдЧрд░ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рд╢реЗрд╖ рддрд░реНрдХ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдмрдВрдзреЗ рд░рд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдирд╛рдо рд╕реНрдерд┐рд░ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреЛрдИ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ? я╕П

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

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

NUnit рдХреЗ рдЖрдкрдХреЗ рдЧрд╣рди рдЬреНрдЮрд╛рди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ? рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рд░рдЧрд░ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рд╢реЗрд╖ рддрд░реНрдХ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдмрдВрдзреЗ рд░рд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдирд╛рдо рд╕реНрдерд┐рд░ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреЛрдИ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ? я╕П

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдПрдирдпреВрдиреАрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдЬреНрдЮрд╛рди рдЧрд╣рд░реЗ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ :( рдПрдирдХреНрд░рдВрдЪ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдПрдирдпреВрдиреАрдЯ рдирд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЬрдм рддрдХ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рднреМрддрд┐рдХ рдирд╛рдо рдХреЛ рдмрджрд▓рддрд╛/рд╕реНрдерд┐рд░ рдХрд░рддрд╛ рд╣реИ NUnit API рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛, рддреЛ рд╣рдореЗрдВ рдпрд╣рд╛рдБ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдХрдо рд╕реЗ рдХрдо рдПрдирдХреНрд░рдВрдЪ рдХреЗ рд▓рд┐рдПред

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

@remcomulder рдмрд╕ рдЖрдкрдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рд╣рдо рдЕрдВрдд рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХреЗрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, xUnit рдврд╛рдВрдЪреЗ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, NUnit рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдереА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд╕реНрдерд┐рд░ рдирд╛рдореЛрдВ рд╡рд╛рд▓реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдкреАрдЖрд░ рдХрд╛ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг ( v3.51.0 ) рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ NUnit рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ( рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ), рд╣рд╛рд▓рд╛рдВрдХрд┐ v4 рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рдЖрдЙрдЯ-рдСрдл-рдж-рдмреЙрдХреНрд╕ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

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

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

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

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, AutoFixture VolatileNameTestMethodBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИ рдФрд░ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдордЭрджрд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ? рдпрджрд┐ рд╣рдо AutoFixture рдХреЛ VolatileNameTestMethodBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ (рдЬреИрд╕реЗ, 'AutoFixture.FixedTestNames'=='1') рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛, рдПрдХ рдзрд╛рд╡рдХ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдбрд░ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдмреЛрдирд╕ рд╣реЛрдЧрд╛ рдЬреЛ рдХрдИ рдзрд╛рд╡рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рд╡рдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рдпрд╛рд╕ рдХреЗ) рдФрд░ рджреЛрдиреЛрдВ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдореБрдЭреЗ рдареЛрд╕ рд▓рдЧ рд░рд╣рд╛ рд╣реИред

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

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдмреЗрд╣рддрд░ рдФрд░ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖ - рд╣рдо FixedNameTestMethodBuilder рдХреЛ v4 (рд╣рдорд╛рд░реА рдЕрдЧрд▓реА рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ) рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдгрдиреАрддрд┐ рдмрдирд╛ рджреЗрдВрдЧреЗ рдЬреЛ рдЖрдЧрд╛рдореА рдорд╣реАрдиреЗ рдпрд╛ рджреЛ рдореЗрдВ рдЬрд╛рд░реА рдХреА рдЬрд╛рдПрдЧреАред рдЙрдкрдпреБрдХреНрдд рдкреАрдЖрд░ рдкрд╣рд▓реЗ рд╣реА рд╕реНрд╡реАрдХреГрдд рд╣реЛ рдЪреБрдХрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдХреЛрдб рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЕрд╕реНрдерд┐рд░ рдкрд░реАрдХреНрд╖рдг рдирд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рддреЛ рд╡рд╣ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрддреЗ рд╣реБрдП, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдЧрд╛ред

рдмрд╛рдж рдореЗрдВ рд╣рдо рдЖрдкрдХреЗ рдЬреИрд╕рд╛ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рдереЗ - рдПрдХ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░/AppConfig рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рддрднреА рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдмреЗрд╣рддрд░ рдФрд░ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖ - рд╣рдо FixedNameTestMethodBuilder рдХреЛ v4 (рд╣рдорд╛рд░реА рдЕрдЧрд▓реА рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬрд╝) рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдгрдиреАрддрд┐ рдмрдирд╛ рджреЗрдВрдЧреЗ рдЬреЛ рдЖрдЧрд╛рдореА рдорд╣реАрдиреЗ рдпрд╛ рджреЛ рдореЗрдВ рдЬрд╛рд░реА рдХреА рдЬрд╛рдПрдЧреАред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ :) рдореИрдВ рдЦреБрд╢ рд╣реВрдБ! рдЖрдкрдХреЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдмрдврд╝рд┐рдпрд╛ рдЖрдкрдХреЗ рдЙрддреНрддрд░реЛрдВ рдФрд░ рд╕рд╣рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж

рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдХрд┐рд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

@remcomulder @zvirja рдмрд╕ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ (рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХреА), рдФрд░ рдЖрдкрдиреЗ рдпрд╣рд╛рдВ рдЬреЛ рд╕рдорд░реНрдкрдг рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рд╡рд╣ рдХрдорд╛рд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ! рдЖрдкрдХреЗ рдорд╣рд╛рди рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рджред

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