рдкрд╛рдпрдерди рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рддред рднрд╛рдЧ 1

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!

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

рдпрд╣ рдЧрд╛рдЗрдб рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╢рд╛рдВрдд рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ
рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдгред

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

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



рдХреЛрдб рдкрд░реАрдХреНрд╖рдг

рдЖрдк рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рдЖрдк рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реЗ рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рддрдХ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрдирд╛рдо рдореИрдиреБрдЕрд▓ рдкрд░реАрдХреНрд╖рдг

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

рдЕрдиреБрд╕рдВрдзрд╛рди рдкрд░реАрдХреНрд╖рдг - рдкрд░реАрдХреНрд╖рдг рдЬреЛ рдПрдХ рдпреЛрдЬрдирд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢реЛрдз рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░ рд╢реЛрдз рдХрд░рддреЗ рд╣реИрдВред

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

рдзреВрдорд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

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

рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд╡реА.рдПрд╕. рдПрдХреАрдХрд░рдг рдЯреЗрд╕реНрдЯ

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

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

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

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

рдЖрдзреБрдирд┐рдХ рдХрд╛рд░реЗрдВ рдЦреБрдж рдЖрдкрдХреЛ рдЯреВрдЯреЗ рд╣реБрдП рдмрд▓реНрдм рдХреА рд╕реВрдЪрдирд╛ рджреЗрдВрдЧреАред рдпрд╣ рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рд╣рдордиреЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА:

  1. рдПрдХ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдШрдЯрдХреЛрдВ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЙрдирдХреА рдмрд╛рддрдЪреАрдд рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ;
  2. рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЬреЛ рдХрд┐рд╕реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдПрдХрд▓ рдШрдЯрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред
  3. рдЖрдк рдкрд╛рдпрдерди рдореЗрдВ рджреЛрдиреЛрдВ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдпреЛрдЧ () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬреНрдЮрд╛рдд рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдпреЛрдЧ () рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдпреЛрдЧ (1, 2, 3) 6 рд╣реИ:

>>> assert sum([1, 2, 3]) == 6, "Should be 6" 

рдорд╛рди рд╕рд╣реА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП REPL рдореЗрдВ рдХреБрдЫ рднреА рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрджрд┐ sum() рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЧрд▓рдд рд╣реИ, рддреЛ " AssertionError 6 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ AssertionError рдЬрд╛рдПрдЧрд╛ред рдХрдерди рд╡рд┐рд╡рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪреЗрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдЕрдорд╛рдиреНрдп рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ AssertionError

 >>> assert sum([1, 1, 1]) == 6, "Should be 6" Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError: Should be 6 

REPL рдореЗрдВ, рдЖрдк AssertionError рджреЗрдЦреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ sum() рдорд╛рди 6 рдирд╣реАрдВ рд╣реИред

REPL рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реЗ test_sum.py рдирд╛рдордХ рдПрдХ рдирдП рдкрд╛рдпрдерди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ test_sum.py рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБ:

 def test_sum(): assert sum([1, 2, 3]) == 6, "Should be 6" if __name__ == "__main__": test_sum() print("Everything passed") 

рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рд╛ рдХрд╛ рдорд╛рдорд▓рд╛ (рдЯреЗрд╕реНрдЯ рдХреЗрд╕), рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдФрд░ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ (рдХрдорд╛рдВрдб рд▓рд╛рдЗрди) рд╣реИред рдЕрдм рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 $ python test_sum.py Everything passed 

рдЖрдк рд╕рдлрд▓ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ, "рд╕рдм рдХреБрдЫ рдмреАрдд рдЧрдпрд╛"ред

sum() рдореЗрдВ рдкрд╛рдпрдерди рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдиреЗ рд▓рд┐рд╕реНрдЯ рдЪреЗрдХ рдХрд░ рд▓реА рд╣реИред рдЖрдЗрдП рдЯрдкрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде test_sum_2.py рдирд╛рдордХ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 def test_sum(): assert sum([1, 2, 3]) == 6, "Should be 6" def test_sum_tuple(): assert sum((1, 2, 2)) == 6, "Should be 6" if __name__ == "__main__": test_sum() test_sum_tuple() print("Everything passed") 

test_sum_2.py , рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ test_sum_2.py рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ s um() (1, 2, 2) 5 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ 6. рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрддреА рд╣реИ, рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдФрд░ рдПрдХ рдЯреНрд░реЗрд╕рдмреИрдХ:

 $ python test_sum_2.py Traceback (most recent call last): File "test_sum_2.py", line 9, in <module> test_sum_tuple() File "test_sum_2.py", line 5, in test_sum_tuple assert sum((1, 2, 2)) == 6, "Should be 6" AssertionError: Should be 6 

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

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

рдЯреЗрд╕реНрдЯ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯрд░ рдЪреБрдирдирд╛

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

  • unittest;
  • рдирд╛рдХ рдпрд╛ рдирд╛рдХ 2;
  • pytestред

рдПрдХ рдкрд░реАрдХреНрд╖рдг рдареЗрдХреЗрджрд╛рд░ рдЪреБрдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рдЕрдиреБрднрд╡ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

unittest

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

рдПрдХрдордд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд░рдЦреЛ;
  • рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрдореЛрджрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдореБрдЦрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрдЬрд╛рдп рдЯреЗрд╕реНрдЯрдХреЗрд╕ рдХреНрд▓рд╛рд╕ред


рдкрд╣рд▓реЗ рд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рдЕрдирдЯреЗрд╕реНрдЯ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  1. рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдПрдХрддрд░рдлрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВ;
  2. TestSum рдирд╛рдордХ рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ рдЬреЛ TestSum рдХреНрд▓рд╛рд╕ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдЧрд╛;
  3. рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ self рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓реЗрдВ;
  4. self.assertEqual() рдХреНрд▓рд╛рд╕ рдореЗрдВ self.assertEqual() рд╡рд┐рдзрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдмрдпрд╛рдиреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ;
  5. рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЛ unittest.main() рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓реЗрдВред

рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ test_sum_unittest.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:

 import unittest class TestSum(unittest.TestCase): def test_sum(self): self.assertEqual(sum([1, 2, 3]), 6, "Should be 6") def test_sum_tuple(self): self.assertEqual(sum((1, 2, 2)), 6, "Should be 6") if __name__ == '__main__': unittest.main() 

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, рдЖрдкрдХреЛ рдПрдХ рд╕рдлрд▓ рд╕рдорд╛рдкрди (рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛) рдФрд░ рдПрдХ рдЕрд╕рдлрд▓ (рдПрдл рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд) рдорд┐рд▓реЗрдЧрд╛:

 $ python test_sum_unittest.py .F ====================================================================== FAIL: test_sum_tuple (__main__.TestSum) ---------------------------------------------------------------------- Traceback (most recent call last): File "test_sum_unittest.py", line 9, in test_sum_tuple self.assertEqual(sum((1, 2, 2)), 6, "Should be 6") AssertionError: Should be 6 ---------------------------------------------------------------------- Ran 2 tests in 0.001s FAILED (failures=1) 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдкрдиреЗ рджреЛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдмреЗрдХрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдзрд╛рд╡рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдкрд╛рдпрдерди 2 рдФрд░ 3 рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдкрд╛рдпрдерди 2.7 рдФрд░ рдЙрд╕рд╕реЗ рдиреАрдЪреЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдпреВрдирд┐рд╕реНрдЯреЗрд╕реНрдЯ рдХреЛ рдпреВрдиреАрдЯреЗрд╕реНрдЯ 2 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдпреВрдирд┐рд╕реНрдЯреЗрд╕реНрдЯ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╛рдпрдерди 2 рдФрд░ рдкрд╛рдпрдерди 3 рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓реЗрдВрдЧреЗред

рдпреВрдиреАрдЯреЗрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рдкрдврд╝реЗрдВред

рдирд╛рдХ

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

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

Nose2 рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ PyPl рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред nose2 рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред рдирд╛рдо рдореЗрдВ рд╕рднреА test*.py рдФрд░ рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ unittest.TestCase рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ:

 $ pip install nose2 $ python -m nose2 .F ====================================================================== FAIL: test_sum_tuple (__main__.TestSum) ---------------------------------------------------------------------- Traceback (most recent call last): File "test_sum_unittest.py", line 9, in test_sum_tuple self.assertEqual(sum((1, 2, 2)), 6, "Should be 6") AssertionError: Should be 6 ---------------------------------------------------------------------- Ran 2 tests in 0.001s FAILED (failures=1) 

рдпрд╣ рд╣реИ рдХрд┐ test_sum_unittest.py рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╛рдХ 2 рдкрд░реАрдХреНрд╖рдг рдзрд╛рд╡рдХ рд╕реЗ test_sum_unittest.py рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирд╛рдХ 2 рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЫрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЭрдВрдбреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдирд╛рдХ 2 рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВ ред

pytest

pytest unittest рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдХрд╛ рдЕрд╕рд▓реА рдлрд╛рдпрджрд╛ рдЗрд╕рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВред рдкрд╛рдпрдереЗрд╕реНрдЯ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдкрд╛рдпрдерди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ test_ рд╣реИред

рдЗрд╕рдореЗрдВ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:

  • рд╡рд┐рд╢реЗрд╖ рд╕реЗрд▓реНрдлрд╛рд╕рд░реНрдЯ * () рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореБрдЦрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди;
  • рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди;
  • рдЕрдВрддрд┐рдо рд╡рд┐рдлрд▓ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛;
  • рд╕реИрдХрдбрд╝реЛрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдПрдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЯреЗрд╕реНрдЯрд╕рдо рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 def test_sum(): assert sum([1, 2, 3]) == 6, "Should be 6" def test_sum_tuple(): assert sum((1, 2, 2)) == 6, "Should be 6" 

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

рдкрд╣рд▓рд╛ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдирд╛

рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╕реАрдЦрд╛ рдерд╛, рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд sum() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕рдорд╛рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ my_sum рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБред My_sum рдХреЗ рдЕрдВрджрд░, рдПрдХ рдЦрд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо _init_.py ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ my_sum рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

project/
тФВ
тФФтФАтФА my_sum/
тФФтФАтФА __init__.py


my_sum/__init__.py рдЦреЛрд▓реЗрдВ рдФрд░ sum() рдирд╛рдо рд╕реЗ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ, рдЬреЛ my_sum/__init__.py рдЗрдирдкреБрдЯреНрд╕ (рд╕реВрдЪреА, рдЯрдкрд▓, рд╕реЗрдЯ) рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдорд╛рди рдЬреЛрдбрд╝рддрд╛ рд╣реИред

 def sum(arg): total = 0 for val in arg: total += val return total 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЪрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ total рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, arg рдореЗрдВ рд╕рднреА рдорд╛рдиреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ total рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдлрд┐рд░, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдБ

рдЖрдк рдПрдХ test.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд╣реЛрдЧрд╛ред рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХреЗ рдКрдкрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ test.py ред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреЗрдбрд╝ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

project/
тФВ
тФЬтФАтФА my_sum/
тФВ тФФтФАтФА __init__.py
|
тФФтФАтФА test.py


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

рдиреЛрдЯ: рдФрд░ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдПрдХ рдПрдХрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ?
рдЖрдк рдХрд┐рд╕реА рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд __import__() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛рдПрдВ, рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЪрд░ред from my_sum import sum рдмрдЬрд╛рдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ:

 target = __import__("my_sum.py") sum = target.sum 

__import__() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ __import__() рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдкреИрдХреЗрдЬ рдореЗрдВ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЕрдЧрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдорд╛рдирдХ рдкреИрдХреЗрдЬ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ math.py рдЧрдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рд╕реЗ math.py ред

рдХреИрд╕реЗ рдПрдХ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд░реЗрдВ

рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдХреБрдЫ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рдЖрдк рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
  2. рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдпрд╛ рдПрдХ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ?

рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ sum() рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рдХреНрдпрд╛ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
  • рдХреНрдпрд╛ рдПрдХ рдЯреНрдпреВрд▓ рдпрд╛ рд╕реЗрдЯ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
  • рдХреНрдпрд╛ рдореИрдВ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреА рд╕реВрдЪреА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?
  • рдпрджрд┐ рдЖрдк рдЗрдирдкреБрдЯ рдХреЛ рдЦрд░рд╛рдм рдорд╛рди рджреЗрддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ: рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдпрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ?
  • рдпрджрд┐ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ test.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 import unittest from my_sum import sum class TestSum(unittest.TestCase): def test_list_int(self): """ Test that it can sum a list of integers """ data = [1, 2, 3] result = sum(data) self.assertEqual(result, 6) if __name__ == '__main__': unittest.main() 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЛрдб:

  • рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкреИрдХреЗрдЬ my_sum() sum() рд╕реЗ рдЖрдпрд╛рдд sum() ;
  • рдПрдХ рдирдпрд╛ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХреНрд▓рд╛рд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ TestSum рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ unittest.TestCase рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддрд╛ рд╣реИ;
  • рдкреВрд░реНрдгрд╛рдВрдХ рд╕реВрдЪреА рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ .test_list_int() рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред .test_list_int() рд╡рд┐рдзрд┐ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдЧреА
:
  1. рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА (1, 2, 3) рд╕рд╛рде рдПрдХ data рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ;
  2. рдЪрд░ result my_sum.sum(data) рдорд╛рди my_sum.sum(data) ;
  3. рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдорд╛рдиред .assertEqual() рд╡рд░реНрдЧ рдкрд░ .assertEqual() рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 6 рд╣реИред

  • рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ .main() рдЯреЗрд╕реНрдЯ рд░рдирд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд╕реНрд╡ рдХреНрдпрд╛ рд╣реИ, рдпрд╛ рдХреИрд╕реЗ .assertEqual() рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдЖрдк рдкрд╛рдпрдерди 3 рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ

рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдЬреНрдЮрд╛рдд рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдЕрднрд┐рдХрдерди рдХрд╣рддреЗ рд╣реИрдВред рдмрдпрд╛рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ:

  • рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рджреЛрд╣рд░рд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ рдЪрд▓рд╛рдПрдВ рдХрд┐ рд╡реЗ рд╣рд░ рдмрд╛рд░ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ;
  • рдЕрдкрдиреЗ рдЗрдирдкреБрдЯ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ - рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпреЛрдЧ рдореЗрдВ рдорд╛рдиреЛрдВ рдХрд╛ sum() рдЙрджрд╛рд╣рд░рдгред

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

рд╡рд┐рдзрд┐рдмрд░рд╛рдмрд░
.assertEqual (рдП, рдмреА)a == рдмреА
.assertTrue (x)рдмреВрд▓ (x) рдЯреНрд░реВ рд╣реИ
.assertFalse (x)рдмреВрд▓ (x) рдЧрд▓рдд рд╣реИ
.assertIs (рдП, рдмреА)рдП рдмреА рд╣реИ
.assertIsNone (x)x рдХреЛрдИ рдирд╣реАрдВ рд╣реИ
.assertIn (рдП, рдмреА)рдмреА рдореЗрдВ
.assertIsInstance (рдП, рдмреА)рдЖрдЗрдВрд╕реНрдЯреАрди (рдП, рдмреА)


.assertIs() , .assertIsNone() , .assertIn() , рдФрд░ .assertIsInstance() рд╡рд┐рдкрд░реАрдд рддрд░реАрдХреЗ рд╣реИрдВ .assertIsNot() рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ

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

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

рдкрд╣рд▓реЗ рдЯреЗрд╕реНрдЯ рдХрд╛ рд╢реБрднрд╛рд░рдВрдн

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

рд░рдирд┐рдВрдЧ рдЯреЗрд╕реНрдЯ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯрд░реНрд╕

рдЯреЗрд╕реНрдЯ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯрд░ - рдПрдХ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдЯреЗрд╕реНрдЯ рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реИ, рджрд╛рд╡реЗ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред Test.py рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛:

 if __name__ == '__main__': unittest.main() 

рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рд╣реИред рдпрджрд┐ рдЖрдк рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ python test.py рдЪрд▓рд╛рдХрд░ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ unittest.main() test.py ред рдпрд╣ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдХрд░ рдкрд░реАрдХреНрд╖рдг unittest.TestCase рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ unittest.TestCase рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред

рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдкрд░реАрдХреНрд╖рдг рдзрд╛рд╡рдХ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ test.py рдирд╛рдордХ рдПрдХ рдПрдХрд▓ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рд╣реИ, рддреЛ рдкрд╛рдпрдерди рдЯреЗрд╕реНрдЯреЛрд╕реНрдЯреЛрди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИред

рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдпреВрдиреАрдЯреЗрд╕реНрдЯ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдЗрдП рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:

 $ python -m unittest test 

рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╣реА рдкрд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ ( test рдХрд╣рд╛ рдЬрд╛рддрд╛ test ) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред рдЖрдЙрдЯрдкреБрдЯ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП -v рд╣реИред рдЪрд▓реЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

 $ python -m unittest -v test test_list_int (test.TestSum) ... ok ---------------------------------------------------------------------- Ran 1 tests in 0.000s 

рд╣рдордиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг test.py рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд┐рдпрд╛ред рд╡рд░реНрдмреЛрд╕ рдореЛрдб рдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ред

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

 $ python -m unittest discover 

рдпрд╣ рдХрдорд╛рдВрдб test*.py рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦреЗрдЧрд╛ред test*.py рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдирд╛рдо рдореЗрдВред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдкрд░реАрдХреНрд╖рдг рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдФрд░ рдЖрдк test*.py рдирд╛рдордХрд░рдг рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк -s рдзреНрд╡рдЬ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 $ python -m unittest discover -s tests 

unittest рдПрдХ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рддреИрдпрд╛рд░ рдХрд░реЗрдЧрд╛ред
рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЖрдкрдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, src / рдирд╛рдордХ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдЖрдк unittest рдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -t рдлреНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╣рд╛рдВ рдЪрд▓рд╛рдирд╛ рд╣реИ:

 $ python -m unittest discover -s tests -t src 

unittest рд╕рднреА test*.py рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ src/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ tests рдореЗрдВ рдкрд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдордЭрдирд╛

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

sum() рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдиреНрдп рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдВрд╢ред

test.py рдореЗрдВ рдХреЛрдб рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП test.py рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ fractions рдореЙрдбреНрдпреВрд▓ рд╕реЗ Fraction рдкреНрд░рдХрд╛рд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВред

 from fractions import Fraction 

рдЕрдм рдПрдХ рдмрдпрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ, рдПрдХ рдЧрд▓рдд рдореВрд▓реНрдп рдХреА рдЙрдореНрдореАрдж рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ case, expect рдФрд░ expect рдХрд╛ рдпреЛрдЧ 1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛:

 import unittest from my_sum import sum class TestSum(unittest.TestCase): def test_list_int(self): """ Test that it can sum a list of integers """ data = [1, 2, 3] result = sum(data) self.assertEqual(result, 6) def test_list_fraction(self): """ Test that it can sum a list of fractions """ data = [Fraction(1, 4), Fraction(1, 4), Fraction(2, 5)] result = sum(data) self.assertEqual(result, 1) if __name__ == '__main__': unittest.main() 

рдпрджрд┐ рдЖрдк рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдПрдХрддрд░рдлрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдБ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

 $ python -m unittest test F. ====================================================================== FAIL: test_list_fraction (test.TestSum) ---------------------------------------------------------------------- Traceback (most recent call last): File "test.py", line 21, in test_list_fraction self.assertEqual(result, 1) AssertionError: Fraction(9, 10) != 1 ---------------------------------------------------------------------- Ran 2 tests in 0.001s FAILED (failures=1) 

рдЗрд╕ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрддреЗ рд╣реИрдВ:

  • рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИ: рдПрдХ рдЕрд╕рдлрд▓ (рдПрдл), рдПрдХ рдкрд╛рд░рд┐рдд (;);
  • рд╡рд┐рдлрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

  1. рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо ( test_list_fraction );
  2. рдЯреЗрд╕реНрдЯ рдореЙрдбреНрдпреВрд▓ ( test ) рдФрд░ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ ( TestSum );
  3. рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЯреНрд░реЗрд╕рдмреИрдХ рддрд╛рд░;
  4. рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо (1) рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо (рдЕрдВрд╢, 9, 10) рдХреЗ рд╕рд╛рде рд╡рд┐рд╡рд░рдг рдХрд╛ рд╡рд┐рд╡рд░рдг

рдпрд╛рдж рд░рдЦреЗрдВ, рдЖрдк python -m unittest рдореЗрдВ -v рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

PyCharm рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣рд╛ рд╣реИ

рдпрджрд┐ рдЖрдк PyCharm IDE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рдмрд┐рдирд╛ рд░реБрдХрд╛рд╡рдЯ рдпрд╛ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреВрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
  2. рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдореЗрдВ, unittest run рдХрдорд╛рдВрдб рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'рдореЗрд░реЗ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдпреВрдиреАрдЯреИрд╕реНрдЯ ...'ред

рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХрддрд░рдлрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ рдФрд░ PyCharm рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛:



рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА PyCharm рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред

рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рд╕реЗ рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдирд╛

рдпрджрд┐ рдЖрдк Microsoft Visual Studio рдХреЛрдб IDE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ unittest, nose рдФрд░ pytest рдХрд╛ рд╕рдорд░реНрдерди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Python рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк Ctrl + Shift + P рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдкреИрд▓реЗрдЯ рдЦреЛрд▓рдХрд░ рдФрд░ "рдкрд╛рдпрдерди рдЯреЗрд╕реНрдЯ" рд▓рд┐рдЦрдХрд░ рдкрд░реАрдХреНрд╖рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:



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

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



рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡рд┐рдлрд▓ рд░рд╣реЗ рд╣реИрдВред

рдЕрдВрдд

рд▓реЗрдЦ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо Django рдФрд░ рдлреНрд▓рд╛рд╕реНрдХ рдЬреИрд╕реЗ рдЪреМрдЦрдЯреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред

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

рджреВрд╕рд░рд╛ рднрд╛рдЧ

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


All Articles