рдПрд╕рдПрдордПрд╕ рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рд╕реА рдкрд░реАрдХреНрд╖рдг

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


void test_object_addition() { ensure_equals("2 + 2 = ?", 2 + 2, 4); } 

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


(CC BY-SA рдХреЗ рддрд╣рдд рдХрдЯрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ KDPVред)


рдЪрд╛рд▓ рдХреНрдпрд╛ рд╣реИ?


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


 $ cat test_addition.c #include <cutter.h> void test_addition() { cut_assert_equal_int(2 + 2, 5); } 

 $ cc -shared -o test_addition.so \ -I/usr/include/cutter -lcutter \ test_addition.c 

 $ cutter . F ========================================================================= Failure: test_addition <2 + 2 == 5> expected: <4> actual: <5> test_addition.c:5: void test_addition(): cut_assert_equal_int(2 + 2, 5, ) ========================================================================= Finished in 0.000943 seconds (total: 0.000615 seconds) 1 test(s), 0 assertion(s), 1 failure(s), 0 error(s), 0 pending(s), 0 omission(s), 0 notification(s) 0% passed 

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


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


рд╡рд┐рд╡рд░рдг рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдк


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


рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рд╣реЛ рд░рд╣реЗ рд╣реИрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред C ++ рдорд╛рдирдХ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд▓рд┐рдирдХреНрд╕ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рддреАрди рдкреНрд░рдореБрдЦ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдореЛрдВ рдХреЛ рдкреЛрд╕рд┐рдХреНрд╕ рдореЗрдВ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, POSIX рд╕рд┐рд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рдВрд╕ dlopen() , dlsym() , dlclose() рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, dlsym() рдорджрдж рд╕реЗ рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдкреНрд░рддреАрдХ рдХрд╛ рдирд╛рдо рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ ... рдмрд╕ рдЗрддрдирд╛ рд╣реАред POSIX рджреНрд╡рд╛рд░рд╛ рднрд░реА рд╣реБрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


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


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


 $ cat test.cpp void test_object_addition() { } 

 $ clang -shared test.cpp 

 $ nm -gj ./a.out __Z20test_object_additionv dyld_stub_binder 

рдЗрд╕рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЛ рдкрд╛рд░реНрд╕ рдФрд░ dlsym() рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рдЧрд╣рди рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЬреИрд╕реЗ рдХрд┐ libelf , libMachO , pe-parse рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╣рд┐рддреЛрдВ рдХреЗ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдирдПрдо рдФрд░ рдХрдВрдкрдиреА рд╕рд┐рд░реНрдл рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рд░реЛрд╣ рдЫрд╛рдирдиреЗ


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


 __Z20test_object_additionv dyld_stub_binder 

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ __Z20test_object_additionv , рдЬрдм рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд┐рд░реНрдл test_object_addition ? рдФрд░ рдпрд╣ рдХреНрдпрд╛ рдмрдЪрд╛ рд╣реИ dyld_stub_binder ?


" __Z20... " рдЕрдХреНрд╖рд░ __Z20... рддрдерд╛рдХрдерд┐рдд рдирд╛рдо рд╕рдЬрд╛рд╡рдЯ (рдирд╛рдо рдкреНрд░рдмрдВрдз) рд╣реИред рд╕реА ++ рд╕рдВрдХрд▓рди рд╕реБрд╡рд┐рдзрд╛, рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣реЗрдВред рдпрд╣ рд╡рд╣ рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ dlsym() )ред рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЙрдирдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ libdemangle ред рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдЬрд┐рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рд╡рд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдЖрдорддреМрд░ рдкрд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИред


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


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


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


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


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


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


 void test_vector_add_element() { testing::description("vector size grows after push_back()"); } 

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


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


рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕


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


рдХрдЯрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:


  • cut_setup() - рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ
  • cut_teardown() - рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж
  • cut_startup() - рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
  • cut_shutdown() - рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж

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


C ++ рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╕рдВрднрд╡ рд╣реИ:


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

рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред


рд╕реНрд╡-рдирд┐рд╣рд┐рдд рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп


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


рдЕрдиреНрдп


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


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

рдпрд╣ рдЖрдкрдХреА рдмрд╛рдЗрдХ рд▓рд┐рдЦрддреЗ рд╕рдордп рдореМрдЬреВрджрд╛ рдЪреМрдЦрдЯреЗ рдХреЛ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред UX рдмрд╣реБрдд рдЧрд╣рд░рд╛ рд╡рд┐рд╖рдп рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖


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


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


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


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


 void test_object_addition() { ensure_equals(2 + 2, 5); } 

рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрджреНрджреЗ рдХреА рдПрдХ рд╣реА рд╕реВрдЪрдирд╛ рд╕рд╛рдордЧреНрд░реА рд░рдЦрддреЗ рд╣реБрдП:


 Failure: test_object_addition <ensure_equals(2 + 2, 5)> expected: <5> actual: <4> test.c:5: test_object_addition() 

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


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


рдЪреМрдХрд╕ рдкрд╛рдардХ рдиреЗ рдпрд╣ рднреА рдиреЛрдЯ рдХрд┐рдпрд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдПрд╕рдПрдордПрд╕ рдФрд░ рдПрд╕реНрдмреЗрд╕реНрдЯреЛрд╕ рдирд╣реАрдВ рд╣реИрдВ, рдЬреЛ рдкреГрдереНрд╡реА рдХреА рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рдФрд░ рдЕрд░реНрдерд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдкреНрд▓рд╕ рд╣реИред

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


All Articles