рдореВрд▓ рдХреЛрдбрд░рд╢ рдкрд░реАрдХреНрд╖рдг рдЯреЗрдореНрдкреНрд▓реЗрдЯред рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдХреНрд░рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг

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




рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рд╡рд╕реНрддреБ


рддреЛ, рдЪрд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╡рд╕реНрддреБ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╕рд░рд▓ рд╡рд░реНрдЧ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА рдФрд░ рдЙрдирдХреЗ рдХреЙрд▓ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░рдо рд╣реЛрдЧрд╛ред
public class SimpleClass { public void DoAction() { BeforeAction(); try { DoActionCore(); } finally { AfterAction(); } } protected virtual void BeforeAction() { } protected virtual void AfterAction() { } protected virtual void DoActionCore() { } } 


рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ DoAction рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк , PreAction , DoActionCore рдФрд░ AfterAction рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдЕрдиреБрдХреНрд░рдо рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

TestClassName рдЬреИрд╕реЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдпрд╣ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓реЗрдЦрди рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ред

рдЦрд╛рдХрд╛ рдЕрдиреБрдХреВрд▓рди


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

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



рдЕрдВрдЬреАрд░ред 1 - NUnit рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдирд╛

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдПрдХ рдЫреЛрдЯрд╛ рдирд╛рдо рджреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреБ-рдХреНрд▓рд╛рд╕ рд╕реЗ рд╕реНрдЯреБ (рд▓рд┐рдЦреЗрдВ) рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рд▓рд┐рдЦреЗрдВред рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЬрдм рд╡рд╣ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдП, рддреЛ рд╕реНрд░реЛрдд рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЪрд┐рдкрдХрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдХреЛрдб рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдирд┐рдпрдореЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
 #region Test┬лPaste┬╗ (stub class) public class Test┬лPaste┬╗ :┬лPaste┬╗ { string trace = string.Empty; public Test┬лPaste┬╗(┬лCaret┬╗) : base() { } public string Trace { get { return trace; } set { trace = value; } } } #endregion 



рдЕрдВрдЬреАрд░ред 2 - рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╢рд░реАрд░ рдХреЛ рд▓рд┐рдЦрдирд╛

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд┐рдЦрддреЗ рд╕рдордп, рд╣рдо рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЙрдирдХреА рд╕реВрдЪреА рд╕реЗ рдЪреБрдирддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдРрд╕реА рдЯреАрдореЗрдВ рд╣реИрдВ "рдкреЗрд╕реНрдЯ" рдФрд░ "рдХреЗрдпрд░"ред


рдЕрдм рдпрд╣ рдмрддрд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╣рд╛рдБ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рд╕реЗрдЯ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП Line.OnEmptyLine рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред



рдЕрдВрдЬреАрд░ред 3 - рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛

рдкрд╣рд▓реЗ рдХреЗ рд╕рдорд╛рди, рд╣рдо рдПрдХ рдПрдЯреНрд░реИрдб (рдЯреНрд░реЗрд╕ рдЬреЛрдбрд╝реЗрдВ) рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдЯреНрд░реЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрддреЗ рд╣реИрдВред
 trace += "->┬лMember┬╗"; ┬лCaret┬╗ 

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



рдЕрдВрдЬреАрд░ред 4 - рдЯреНрд░реЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рддреИрдпрд╛рд░ рд╣реИрдВред рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдк xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрд╡рдпрдВ-рдирд┐рд░реНрдорд┐рдд рд▓реЛрдЧреЛрдВ рд╕рд╣рд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИред

рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ


рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдЖрдЗрдП SimpleClass рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред

рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирд╣реЗрд░реАрдЯрд░ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред SimpleClass рдХреЗ рдирд╛рдо рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ stu рдЯрд╛рдЗрдк рдХрд░реЗрдВред рдЕрдиреБрдЧрд╛рдореА рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд░реЗрд╕ рд╕рдВрдкрддреНрддрд┐ рд╡рд╛рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдХрд░реНрд╕рд░ рд╕реНрдерд╛рди рдкрд░ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЕрдВрдЬреАрд░ред 5 - рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдХреНрд░рд┐рдпрдг рдФрд░ рдХреЛрдб рд╕рдореНрдорд┐рд▓рди


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


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

 #region TestSimpleClass (stub class) public class TestSimpleClass : SimpleClass { string trace = string.Empty; public TestSimpleClass() : base() { } public string Trace { get { return trace; } set { trace = value; } } protected override void BeforeAction() { base.BeforeAction(); trace += "->BeforeAction"; } protected override void AfterAction() { base.AfterAction(); trace += "->AfterAction"; } protected override void DoActionCore() { base.DoActionCore(); trace += "->DoActionCore"; } } #endregion 


рдирд╛рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЯреНрд░реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рдкреИрд░рд╛рдореАрдЯрд░, рдЖрджрд┐ред


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

 #region SimpleClassTests [TestFixture] public class SimpleClassTests { TestSimpleClass testClass; [SetUp] public void Setup() { testClass = new TestSimpleClass(); } [TearDown] public void Teardown() { testClass = null; } [Test] public void DoActionMethod() { testClass.Trace = string.Empty; testClass.DoAction(); string expectedTrace = "->BeforeAction->DoActionCore->AfterAction"; Assert.AreEqual(expectedTrace, testClass.Trace); } } #endregion 


рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВред рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдордиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗ рдЬреИрд╕рд╛ рд╡рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


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


рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд░реАрдХреНрд╖рд╛ рдкреИрдЯрд░реНрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!

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


All Articles