Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΡΠΈΠΏΡΠΎΡ ΠΈ ΡΡΠ°Π± ?
<Β Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°Π·Π·ΠΈΠ½Π³? 06.12.2016 00:55 ΠΠ°Π²Π½ΠΎΡΡΡ: 5 yrs
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ: ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ
ΠΡΠΈΠΏΡΠΎΡ (aka cryptor) β ΡΡΠΎ ΡΡΠ»Π·Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΡΠΊΡΡΡΠΈΡ ΡΡΠΎΡΠ½ΠΎΠ², Π±ΠΎΡΠΎΠ² ΠΈ ΠΏΡΠΎΡΠ΅ΠΉ Π½Π΅ΡΠΈΡΡΠΈ ΠΎΡ Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ°ΠΌΠΈ.
Π₯ΠΎΡΠΎΡΠΈΠ΅ ΠΊΡΠΈΠΏΡΠΎΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ, Π±ΡΡΡΡΠΎ ΠΈ Π½Π°Π΄ΡΠΆΠ½ΠΎ, Ρ ΠΎΡΡ ΠΈ Π½Π΅ Π±Π΅Π·Π³Π»ΡΡΠ½ΠΎ. ΠΠ½ΠΈ Π΄ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ (Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ°ΠΊΠΈΡ ΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΡΠΎΡ ΠΊΠΎΠ΄ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°Π±ΠΎΠΌ) Π² ΠΊΡΠΈΠΏΡΡΠ΅ΠΌΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠΈΡΡΡΡΡ ΠΊΠΎΠ΄ ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΡΠ°ΡΡΡΠ΅Ρ ΡΡΠ°Π±, ΠΎΠ½ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΠ»ΠΈ ΠΊΡΠΈΠΏΡΠΎΡ ΡΠ²Π΅ΠΆΠΈΠΉ (ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠΎΡΠΈΠΉ, ΠΎΠ± ΡΡΠΎΠΌ Π½ΠΈΠΆΠ΅), ΡΠΎ Π·Π°ΠΊΡΠΈΠΏΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ°ΠΌΠΈ.
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΊΡΠΈΠΏΡΠΎΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½Ρ β Ρ.Π΅. ΠΊΠΎΠ΄ ΠΊΡΠΈΠΏΡΠΎΡΠ° Π² ΠΊΡΠΈΠΏΡΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ ΠΈ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΡΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ API. Π’Π°ΠΊΠΈΠ΅ ΠΊΡΠΈΠΏΡΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΡΠ΅ΠΌΡΠΌΠΈ Π² ΡΠΈΠ»Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΊΡΠΈΠΏΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
Π’Π°ΠΊΠΈΠ΅ ΠΊΡΠΈΠΏΡΠΎΡΡ ΡΠΎΠΆΠ΅ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΡΡΡΡΡ, ΠΈ Π΅ΡΠ»ΠΈ Π°Π²ΡΠΎΡ Π½Π΅ ΡΠΈΡΡΠΈΡ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡ, ΡΠΎ ΠΊΡΠΈΠΏΡΠΎΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ.
Π‘ΡΡΡΒ ΡΠ°Π±ΠΎΡΡΒ ΠΏΠ»ΠΎΡ
ΠΈΡ
ΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² Π²ΠΎΡ Π² ΡΠ΅ΠΌ β Π΅ΡΡΡ ΡΡΠ°Π±. Π‘ΡΠ°Π± Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΡΡΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΠΏΠ»ΡΠ΅ΡΡΡ ΠΊΡΠΈΠΏΡΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ». ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ°ΠΉΠ» ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ, ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
Π’.Π΅. Π½Π°Π΄Π΅ΡΡΡ ΠΏΠΎΠ½ΡΠ»ΠΈ ΠΎΡΠ»ΠΈΡΠΈΡ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΡΡΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ ΡΡΠ°Π± ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π° Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΡΡΡΠ΅ΡΡΡ ΡΠ°ΠΌ ΡΠ°ΠΉΠ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌ ΡΠ°ΠΉΠ», Π½Ρ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠΈΠΏ ΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΡΠΎ Π½Π΅ ΡΡΠΎ ΠΈΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ Π΅ΡΡΠ½Π΄Π°, Ρ.ΠΊ. ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π»ΡΠ±ΠΎΠΉ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ½ΠΈΠΊ ΡΠΏΠ°Π»ΠΈΡ Π²ΠΈΡΡΡ ΠΏΡΠΈ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ΅ ! π
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠ°ΠΉΠ» Π½Π° Π΄ΠΈΡΠΊ Π½Π΅ ΠΏΠΈΡΡΡ, Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ, Π½ΠΎ ΡΡΠΎ ΠΈΡ
Π½Π΅ ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°Π΅Ρ, Ρ.ΠΊ. ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ Π°Π½ΡΠΈΠ²ΠΈΡΡΡ ΡΠ»ΠΎΠ²ΠΈΡ ΡΡΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅.
Π ΡΠ°ΠΊΠΈΡ
ΠΊΡΠΈΠΏΡΠΎΡΠ°Ρ
ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΊΡΠΈΠΏΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΡΠ°Π±Π°ΠΌΠΈ. ΠΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π²Π΅ΡΡΠΌΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ β Π² Ρ
ΠΎΡΠΎΡΠΈΡ
ΠΊΡΠΈΠΏΡΠ°Ρ
ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ-Π»ΠΈΡΡ ΠΊΠΎΠ΄, ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ, Π° ΡΠΎ ΡΡΠ°Π±Π°ΠΌΠΈ Π² ΠΏΠ»ΠΎΡ
ΠΈΡ
ΠΊΡΠΈΠΏΡΠΎΡΠ°Ρ
ΡΠΆΠ΅ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΠΏΠΎΡΡΠΎΠΌΡ Π°Π²ΡΠΎΡΡ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΡΠ°Π±.
ΠΠΎΠ΄Ρ
ΠΎΠ΄ Π³Π»ΡΠΏ Π΄ΠΎ Π±Π΅Π·ΠΎΠ±ΡΠ°Π·ΠΈΡ, Π²Π΅Π΄Ρ Π΅ΠΆΠ΅Π»ΠΈ ΡΠΏΠ°Π»ΠΈΡΡΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ°ΠΌΠΈ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΊΡΠΈΠΏΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» β Π·Π° Π½ΠΈΠΌ ΠΏΠΎΠ»Π΅ΡΡΡ ΠΈ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅.
STAB — ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π½Π° ΡΡΡΡΠΊΠΈΠΉ
EnglishSo, the smasher raptorial appendage can stab with a point at the end, or it can smash with the heel.
Π ΠΎΡ ΠΎΡΠ½ΠΈΡΠΈΠΉ ΠΎΡΠ³Π°Π½ ΡΠΎΡΠΎΠ½ΠΎΠ³ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠ»ΠΎΡΡ ΠΎΡΡΡΠΈΠ΅ΠΌ Π½Π° ΠΊΠΎΠ½ΡΠ΅, ΠΈΠ»ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΊΡΡΡΠ°ΡΡ ΠΏΡΡΠΊΠΎΠΉ.EnglishThey go, «Well, he’s certainly not dumb enough to stab himself through the skin to entertain us for a few minutes.
ΠΠ½ΠΈ Π΄ΡΠΌΠ°ΡΡ: «ΠΡ, ΠΎΠ½ ΠΆΠ΅ Π½Π΅ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π³Π»ΡΠΏ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΊΠ½ΡΡΡ ΡΠ΅Π±Π΅ ΠΊΠΎΠΆΡ ΡΠ°Π΄ΠΈ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠΈΠ½ΡΡΠ½ΠΎΠ³ΠΎ Π²Π΅ΡΠ΅Π»ΡΡ».Englishto stab
‘s reputation ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡΡ ΡΡΠ΅ΠΉ-Π». ΡΠ΅ΠΏΡΡΠ°ΡΠΈΠΈEnglishto stab sb.’s reputation
ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡΡ ΡΡΠ΅ΠΉ-Π». ΡΠ΅ΠΏΡΡΠ°ΡΠΈΠΈEnglishto stab in the back
Π²ΡΠ°Π΄ΠΈΡΡ Π½ΠΎΠΆ Π² ΡΠΏΠΈΠ½ΡΠ’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ βΡΠ°ΠΉΠ½ΠΈΠΊΠΎΠ²β.
. Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ | by Andriy IvashchenkoΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ²
JSDOM ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ JavaScript-ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² WHATWG DOM ΠΈ HTML. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, JSDom ΠΈΠΌΠΈΡΠΈΡΡΠ΅Ρ ΡΡΠ΅Π΄Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Ρ Π½ΠΈΡΠ΅Π³ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ JS. Π ΡΡΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΡΠ΅Π΄Π΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΡΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ JSDom ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΎ Π²Π½Π΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ½ΠΈΠΌΠΎΠΊ ΡΠΊΡΠ°Π½Π°), ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π²Π°ΡΠΈΡ ΡΠ΅ΡΡΠΎΠ².
Istanbul β ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅Ρ Π²Π°ΠΌ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΡΠ°ΠΌΠΈ. ΠΠ½ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡ , Π»ΠΈΠ½ΠΈΡΡ , ΡΡΠ½ΠΊΡΠΈΡΡ Π² ΠΏΡΠΎΡΠ΅Π½ΡΠ°Ρ , ΡΡΠΎΠ±Ρ Π²Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ ΠΎΡΡΠ°Π»ΠΎΡΡ ΠΏΠΎΠΊΡΡΡΡ.
Phantom.js β ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Β«headlessΒ» Π±ΡΠ°ΡΠ·Π΅Ρ Webkit, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ ΠΈ JSDom Π² ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½.
Karma β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ
, Π²ΠΊΠ»ΡΡΠ°Ρ Π½Π°ΡΡΠΎΡΡΠΈΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΡ, Phantom, JSdom ΠΈ Π΄Π°ΠΆΠ΅ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΡ. Karma ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ΅ΠΉ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ² Π² ΡΡΠ΅Π΄Π΅ ΡΡΡΠ°Π½ΠΈΡΡ.
ΠΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π° Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ
. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΠΆΠ±, ΠΊΠ°ΠΊ BrowserStack.
Chai β ΡΠ°ΠΌΠ°Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ assertion Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
Unexpected β ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ assertion Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠΌΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ ΠΎΡ Chai.
Sinon.js β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΠΎΡΠ΅Π½Ρ ΠΌΠΎΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΡΠΏΠΈΠΎΠ½ΠΎΠ², Π·Π°Π³Π»ΡΡΠ΅ΠΊ ΠΈ ΠΌΠ°ΠΊΠ΅ΡΠΎΠ² (mocks) Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
testdouble.js β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½ΠΎΠ²ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΠΏΠΎΡ ΠΎΠΆΡΡ Π½Π° Sinon, Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΎΡΠ»ΠΈΡΠΈΡΠΌΠΈ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅, ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ .
Jasmine β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅, ΡΡΠΎ Π²Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²Π°ΡΠΈΡ ΡΠ΅ΡΡΠΎΠ²: ΡΠ°Π±ΠΎΡΠ°ΡΡΠ°Ρ ΡΡΠ΅Π΄Π°, ΡΡΡΡΠΊΡΡΡΠ°, ΠΎΡΡΠ΅ΡΠ½ΠΎΡΡΡ, assertion ΠΈ mocks ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ.
Mocha β Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Jasmine, ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ mocks ΠΈ assertions (ΠΎΠ±ΡΡΠ½ΠΎ Enzyme ΠΈ Chai). ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Mocha Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π½Π°ΡΡΡΠΎΠΈΡΡ, Π½ΠΎ ΠΎΠ½Π° Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠ°Ρ ΠΈ ΠΎΡΠΊΡΡΡΠ° Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ.
Jest β ΡΡΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½Π°Ρ Facebook. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Jasmine ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½Π΅Π³ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ ΠΎ Jasmine ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΈ ΠΊ Π½Π΅ΠΌΡ.
Ava β ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ.
Selenium β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅Ρ Π±ΡΠ°ΡΠ·Π΅Ρ Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ½ Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ΅Π»Π΅ΠΉ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠΈΡΠΈΡΡΠ΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ API. Selenium ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π΄Π°ΠΆΠ΅ Π±Π΅Π· ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Protractor β ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Selenium, Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ»ΡΡΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Ρ ΡΠΊΠΈ Π΄Π»Ρ Angular.
Nightwatch β ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ selenium WebDriver. Π ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ, assertion ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ.
Π‘asper β Π½Π°ΠΏΠΈΡΠ°Π½ ΠΏΠΎΠ²Π΅ΡΡ Phantom ΠΈ Slimer (ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Phantom, Π½ΠΎ Π² Gecko FireFox), ΡΡΠΎΠ±Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Phantom ΠΈ Slimer ΡΠΊΡΠΈΠΏΡΡ. ΠΠ°ΡΠΏΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ, Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ² Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ UI.
Π‘ucumber β Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π²Π΅ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π», ΡΠ°Π½Π΅Π΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ Π² ΠΏΠΎΡ ΠΎΠΆΠΈΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ .
ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°:
ΠΠ½ΠΈΠ³ΠΈ
The Art of Unit Testing by Roy Osherove
xUnit Test Patterns: Refactoring Test Code by Gerard Meszaros
Working Effectively with Legacy Code by Michael Feathers
Pragmatic Unit Testing in C# with NUnit, 2nd Edition by Andy Hunt and Dave Thomas
Π‘ΡΠ°ΡΡΠΈ
https://www.sitepoint.com/javascript-testing-unit-functional-integration/
https://habrahabr.ru/post/169381/
https://joshldavis.com/2013/05/27/difference-between-tdd-and-bdd/
https://adamcod.
es/2014/05/15/test-doubles-mock-vs-stub.html
https://www.quora.com/Software-Testing-What-is-the-difference-between-Mocks-and-Stubs
https://medium.com/powtoon-engineering/a-complete-guide-to-testing-javascript-in-2017-a217b4cd5a2a
https://blog.jscrambler.com/testing-apis-mocha-2/
https://scotch.io/tutorials/test-a-node-restful-api-with-mocha-and-chai
ΠΠΎΠ΄ΠΊΠ°ΡΡΡ
The History of JUnit and the Future of Testing with Kent Beck
Kent Beck, Developer Testing
ΠΡΠΈΠΏΡΠΎΡ
ΠΡΠ°ΠΊ, ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΡΡΠ°ΡΡ ΠΊΡΡΡΡΠΌ Ρ
Π°ΠΊΠ΅ΡΠΎΠΌ ΠΈ Π²ΠΈΡΡΡΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Π΅ΠΌ, ΠΈ ΡΠΆΠ΅ Π΄Π°ΠΆΠ΅ ΠΊΡΠΏΠΈΠ»ΠΈ ΡΠ΅Π±Π΅ ΡΠ°ΠΌΡΡ Π½ΡΠΆΠ½ΡΡ ΠΊΠ½ΠΈΠ³Ρ Β«ΠΠ°ΠΊ ΡΡΠ°ΡΡ Ρ
Π°ΠΊΠ΅ΡΠΎΠΌ Π΄Π»Ρ ΡΠ°ΠΉΠ½ΠΈΠΊΠΎΠ²Β»? ΠΡΡΡ Ρ
Π°ΠΊΠ΅ΡΠΎΠΌ β ΡΡΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΊΡΡΡΠΎ, Π½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π² ΠΊΠ½ΠΈΠ³Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π°, ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ, ΠΊΠ΅ΠΌ ΠΡ ΡΡΠ°Π½Π΅ΡΠ΅, ΡΡΠΎ Ρ
Π°ΠΊΠ΅ΡΠΎΠΌ ΡΠ°ΠΉΠ½ΠΈΠΊΠΎΠ².
Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΏΠΎΡΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΡΠ°ΡΡΠ΅Π³ΠΎΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ
Π°ΠΊΠ΅ΡΡΠΊΠΈΡ
ΡΡΠΎΡΠΎΠ½ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ β ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²ΠΈΡΡΡ, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ Π½Π΅ ΠΏΠ°Π»ΠΈΠ»ΠΈ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π³Π΄Π΅ ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΡΠ°ΡΡ.
ΠΡΠΈΠΏΡΠΎΡ (ΠΎΡ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Β«CryptorΒ» β ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊ) β ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²ΠΈΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌΠΈ-Π²ΠΈΡΡΡΠΎΠΏΠΈΡΠ°ΡΠ΅Π»ΡΠΌΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΊΡΡΡΡ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΡ ΡΡΡΠ½ΠΎΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΠΈΠΏΡΠΎΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ Π²ΠΈΡΡΡ, ΠΌΠ°ΡΠΊΠΈΡΡΠ΅Ρ ΠΈ Π·Π°ΡΠΈΡΠ°Π΅Ρ Π΅Π΅ ΠΎΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠΈΠ³Π½Π°ΡΡΡΠ°ΠΌ.
ΠΠ°ΠΊ ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΡΠΈΠΏΡΠΎΡΡ? ΠΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ: Π±Π΅ΡΠ΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π·Π°ΡΠ΅ΠΌ Π΄Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΈΡΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π² Π½Π°ΡΠ°Π»ΠΎ Π²Π½ΠΎΠ²Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π§ΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΎΠ±ΡΡΡΠ½ΠΈΠΌ Π½Π° ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅: Π±Π΅ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠ°Ρ ΡΡΠΎΡΠ½ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈ Π°ΡΡ
ΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ Π°ΡΡ
ΠΈΠ²Π°ΡΠΎΡΠΎΠΌ WinRAR, ΠΏΡΠΈΡΠ΅ΠΌ Π°ΡΡ
ΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ, Π° Ρ ΠΏΠ°ΡΠΎΠ»ΡΠ½ΠΎΠΉ Π·Π°ΡΠΈΡΠΎΠΉ. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π½ΠΈ ΠΎΠ΄Π½Π° Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΎΡΠ½Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΊ Π°ΡΡ
ΠΈΠ²Π°ΠΌ ΠΎΠ½ΠΈ Π½Π΅ ΡΠΌΠ΅ΡΡ.
ΠΠ΅ΡΠ²ΡΠΉ Π²ΠΈΠ΄ ΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ, ΠΎΠ½ΠΈ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Ρ Π½Π° ΠΏΡΠΎΡΡΠΎΡΠ°Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° ΠΈ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°ΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½ΠΎΠΉ ΡΠ°ΠΊΠΈΡ ΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΠ°Π»ΠΈΡΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠΈ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ°ΠΌΠΈ (Π²Π΅Π΄Ρ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ½ΡΠ΅ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΠΈ ΡΠΎΠΆΠ΅ Π½Π΅ Π΄ΡΠ΅ΠΌΠ»ΡΡ ΠΈ ΡΡΠ°ΡΠ°ΡΡΡΡ ΠΎΡΠ»ΠΎΠ²ΠΈΡΡ ΡΠ²Π΅ΠΆΠΈΠ΅ Π²ΠΈΠ΄Ρ ΠΊΡΠΈΠΏΡΠΎΡΠΎΠ², ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΊΠ°ΠΊ ΠΈΡ Π½Π΅ ΠΎΡΠ»Π°Π²Π»ΠΈΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π»Π΅ΠΆΠ°Ρ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅).

Π§Π°ΡΡΠΎ Π² ΡΠ°Π΄Π΅Π»Π°Ρ ΡΠΎΡΡΠΌΠΎΠ², Π³Π΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΊΡΠΈΠΏΡΠΎΡΡ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π°Π±Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΡ FUD ΠΈ semiFUD. Π Π°ΡΡΠΈΡΡΡΠ΅ΠΌ ΡΡΠΈ Π°Π±Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΠ°ΠΌ Π±ΡΠ»ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. Π§ΡΠΎ ΠΆΠ΅ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅.
1)FUD β Full Undetected β Β«ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ°ΠΌΠΈΒ»
2)semiFUD β Semi-full undetected β Β«ΠΏΠΎΡΡΠΈ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ°ΠΌΠΈΒ».
ΠΠΎΠΌΠΈΠΌΠΎ ΠΊΡΠΈΠΏΡΠΎΡΠΎΠ², ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ (Π²ΠΈΡΡΡΠΎΠ² ΠΈ ΡΡΠΎΡΠ½ΡΠΊΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΈΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠΊΡΠ°ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΈ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΈ ΡΠ»ΡΠΆΠ°Ρ.
ΠΠ»Ρ ΠΊΡΠ°ΠΆΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ICQ, Π»ΠΎΠ³ΠΈΠ½ΠΎΠ² ΠΈ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ ΠΊ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°ΠΌ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ ΠΈ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΎΡΠΎΠ±ΡΠ΅ ΡΠΎΡΠ½ΡΠΊΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠΈΠ½ΡΠΈ ΠΈ ΠΊΡΠΈΠ½ΡΠΈ.
ΠΠ»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π²ΠΈΡΡΡΠ° ΡΠ»ΡΠΆΠ°Ρ Π΄ΠΆΠΎΠΉΠ½Π΅ΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ (Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ), ΡΠ°ΠΊ ΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΡΠ½ΡΠΊΠΎΠ³ΠΎ Π²ΠΈΡΡΡΠ°), ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π° Π²ΡΡΡΠ΅ΠΌ ΡΡΠΎΠ²Π½Π΅.
ΠΠΎΡ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΈ Π²ΡΡ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ ΠΠ°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ.
ΠΠΎ Ρ Π°ΡΠ΄ΠΊΠΎΡΡ: Π΄ΡΠ±Π»Π΅ΡΡ, ΠΌΠΎΠΊΠΈ, ΡΡΠ°Π±Ρ
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΎ ΡΠ΅ΡΡΠ°Ρ . ΠΠΎΡΡ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ RSpec, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«ΠΌΠΎΠΊΠ°ΡΡΒ» ΠΈ Β«Π·Π°ΡΡΠ°Π±ΠΈΡΡΒ». ΠΠΎΡΠΎΡΠΊΠΎ, ΠΏΠΎ Π΄Π΅Π»Ρ ΠΈ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ.
ΠΡΠ±Π»Π΅Ρ (test double)
ΠΠ±ΡΠ΅ΠΊΡ-ΠΊΠ°ΡΠΊΠ°Π΄Π΅Ρ, ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΡΡΠ΅ΠΌΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠΎΠ²:
describe NotificationsController do
# NotificationsController Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ
# ΡΠΎ ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΏΠΎ HTTP
# Ρ ΠΏΠΎΠΌΠΎΡΡΡ NotificationsDatasource.
let(:datasource) do
double(:datasource, as_json: { notifications: [] })
end
before do
# ΠΠΎΠ΄ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ NotificationsDatasource Π΄ΡΠ±Π»Π΅ΡΠΎΠΌ,
# ΡΡΠΎΠ±Ρ Π½Π΅ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° Π² ΡΠ΅ΡΡΠ°Ρ
:
allow(NotificationsDatasource)
.to receive(:new)
.and_return(datasource)
end
describe "#index" do
it "wraps notifications in 'data' key" do
get :index, format: :json
expect(json_response["data"].
keys)
.to have_key "notifications"
end
end
end
Π‘ΡΠ°Π± (stub)
ΠΠ°Π³Π»ΡΡΠΊΠ° Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
context "when attachment file is too large to email" do
let(:max_file_size) { Attachment::MAX_FILE_SIZE }
before do
allow(attachment)
.to receive(:file_size)
.and_return(max_file_size + 1)
end
it "raises 'file is too large' error" do
# ...
end
end
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΡΠΎ Π·Π²Π΅Π·Π΄ΠΎΡΠΊΠΎΠΉ ΡΠΆΠ΅ Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ NotificationsController Π±ΡΠ» ΡΡΠ°Π±. ΠΡΠ΅ Π²Π΅ΡΠ½ΠΎ: ΡΡΠ°Π± β ΡΡΠΎ Π΄ΡΠ±Π»Π΅Ρ Ρ Π·Π°ΡΠΈΡΡΠΌΠΈ ΠΎΡΠ²Π΅ΡΠ°ΠΌΠΈ.
ΠΠΎΠΊ (mock)
Π‘ΡΠ°Π± Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ RSpec ΠΏΡΠΎΠ²Π΅ΡΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ΅ΡΡΠ°:
context "when cloning process cannot be performed" do before do allow(doctor).to receive(:clone) { raise "can't clone" } # ΡΡΠ°Π± end it "notifies airbrake" do expect(Airbrake).to receive(:notify) # ΠΌΠΎΠΊ # Rspec Π·Π°ΡΡΠ°Π±ΠΈΡ `Airbrake.notify` # ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠΎΠ³ΠΎ `it do...end` Π±Π»ΠΎΠΊΠ° # ΠΏΡΠΎΠ²Π΅ΡΠΈΡ, Π±ΡΠ» Π»ΠΈ ΠΎΠ½ Π²ΡΠ·Π²Π°Π½. # ΠΡΠ»ΠΈ Π²ΡΠ·ΠΎΠ²Π° Π½Π΅ Π±ΡΠ»ΠΎ β ΠΎΡΠΈΠ±ΠΊΠ° ΠΈ ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ΅ΡΡ. # # ΠΠΎΠ³Π΄Π° Π½Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΏΡΠΎΡΡΡ, ΡΠ΅ΠΌ # ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΌΠΎΠΊ ΠΎΡ ΡΡΠ°Π±Π°, ΠΎΡΠ²Π΅ΡΠ°ΠΉΡΠ΅: # Β«Π’ΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π°Π»ΠΈΡΡ ΡΠ΅ΡΡΒ». clone_poor_dolly end end
ΠΠΎΠΊΠΈ ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°Π· Π² ΡΠ΅ΡΡΠ΅. ΠΠΌΠ΅ΡΡΠΎ Β«ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° β ΠΡΠΏΡΡΠ°Π½ΠΈΠ΅ β ΠΡΠΎΠ²Π΅ΡΠΊΠ°Β» ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Β«ΠΡΠΎΠ²Π΅ΡΠΊΠ°+ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° β ΠΡΠΏΡΡΠ°Π½ΠΈΠ΅Β». ΠΡΠ»ΠΈ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½Π΅, ΡΡΠΆΠ΅Π»ΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΡΠ°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ°Π± Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ:
# ΠΌΠΎΠΊ
it "notifies airbrake" do
expect(Airbrake).to receive(:notify) # ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° + Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
clone_poor_dolly # ΠΈΡΠΏΡΡΠ°Π½ΠΈΠ΅
end
# ΡΡΠ°Π± + ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°
it "notifies airbrake" do
allow(Airbrake).to receive(:notify) # Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
clone_poor_dolly # ΠΈΡΠΏΡΡΠ°Π½ΠΈΠ΅
expect(Airbrake).to have_received(:notify) # ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°
end
ΠΡΠ±Π»Π΅ΡΡ, ΠΌΠΎΠΊΠΈ ΠΈ ΡΡΠ°Π±Ρ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ΅ΡΡΡ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π° ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ β ΠΊ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΠΎΠ± ΡΡΠΎΠΉ Π΄ΠΈΠ»Π΅ΠΌΠΌΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎΠΈΡ Π»ΠΈ Π²Π°ΠΌ ΠΌΠΎΠΊΠ°ΡΡ-ΡΡΠ°Π±ΠΈΡΡ Π²ΡΠ΅ ΠΏΠΎΠ΄ΡΡΠ΄, ΠΏΠΎΡΠΈΡΠ°ΠΉΡΠ΅:
P.
Β S. ΠΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡΡΠΎΠ² ΠΎΒ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΡΠ΅ΡΡΠ°Ρ
ΠΈΒ ΠΊΡΠ»ΡΡΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΒ ΠΌΠ΅Π½Ρ
Π²Β Π’Π΅Π»Π΅Π³ΡΠ°ΠΌΠ΅.
ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ΡΡ!
Π§Π΅ΠΌ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΈΡΠ°Π»ΠΈΠΊ ΠΎΡ ΡΡΠ°Π±Π° — Π’ΠΎΠ²Π°ΡΠ½ΡΠΉ ΠΎΠ±Π·ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ Π²ΡΠ΅Π·ΠΊΠ°:
ΠΡΠΎ ΡΠΈΠΊΠ» ΡΡΠ°ΡΠ΅ΠΉ, ΠΏΠΎΡΠ²ΡΡΡΠ½Π½ΡΠΉ ΠΏΠ΅ΡΡΠ΅Π²ΡΠΌ ΡΡΡΠΊΠ°ΠΌ. ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΏΡΡΡ, Π²ΠΎΡ ΡΠΏΠΈΡΠΎΠΊ:
ΠΡΠ΄ΡΡ Π΅ΡΡ. ΠΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ΡΡ.Π ΠΏΡΠΎΡΠ»ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΠΎΠ±ΡΡΡΠ½ΠΈΠ» ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΠ°Π»ΠΈΠΊΠ°ΠΌΠΈ ΠΈ ΡΡΠ°Π±Π°ΠΌΠΈ. Π’Π΅ΠΌΠ° ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π² Π»ΠΈΡΠΊΡ ΠΏΡΠΈΠ»Π΅ΡΠ΅Π»ΠΎ Π½Π΅ΠΌΠ°Π»ΠΎ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΠΎΠ± ΡΡΠΈΡ Π²ΠΈΠ΄Π°Ρ Π·Π°ΡΠΎΡΠΊΠΈ. Π ΡΡΠ°ΡΡΠ΅ Π±ΡΠ»ΠΎ ΡΠ°ΠΊ:
- Π‘ΡΠ°Π± (Π°Π½Π³Π». Stub) β ΠΏΠ»ΠΎΡΠΊΠΎΠ΅ ΠΏΠ΅ΡΠΎ, ΡΡΠ΅Π·Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ ΠΏΡΡΠΌΡΠΌ ΡΠ³Π»ΠΎΠΌ.
- ΠΡΠ°Π»ΠΈΠΊ (Π°Π½Π³Π». Italic) β ΡΠΎΠ½ΠΊΠΎΠ΅ ΠΏΠ»ΠΎΡΠΊΠΎΠ΅ ΠΏΠ΅ΡΠΎ, ΡΡΠ΅Π·Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ ΠΏΡΡΠΌΡΠΌ ΡΠ³Π»ΠΎΠΌ.
Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅ΡΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π½Π° ΡΠ»ΠΎΠ²Π°Ρ
, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΡΡΠ» Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ
Π½Π΅ Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΎΠΈΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΈΡ
Π²ΠΌΠ΅ΡΡΠ΅.
Π’ΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠ°ΠΊΠΎΠΉ Π·Π°ΡΠΎΡΠΊΠ΅.
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΡΠ΅Π² Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΡΠ°Π·Π³Π»ΡΠ΄Π΅ΡΡ Π·Π°ΡΠΎΡΠΊΡ Π½Π°ΠΊΠΎΠ½Π΅ΡΠ½ΠΈΠΊΠΎΠ².
ΠΠ° ΡΡΠΎΠΉ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΎΡΡΡΡΠ»ΠΈΠ²ΠΎ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΎΠ½Π° ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ. Π ΡΡΡ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ ΡΠΈΡΠ°ΡΠ° ΠΈΠ· ΡΡΠ°ΡΡΠΈ ΠΎΠ± ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ Π·Π°ΡΠΎΡΠΊΠΈ ΠΈΡΠ°Π»ΠΈΠΊΠ°:Β«Π£ ΠΈΡΠ°Π»ΠΈΠΊΠ° Π²ΡΠ΅ ΡΠ³Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Π·ΠΊΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ Ρ Π²Π°ΡΠ΅ ΠΏΠ΅ΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·Π°ΡΡ, ΡΠ°ΡΠ°ΠΏΠ°ΡΡ Π±ΡΠΌΠ°Π³ΡΒ».
ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ Π²ΡΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½ΠΈΠΆΠ½ΡΡ ΡΠ°ΡΡΡ ΠΏΠ΅ΡΠ°, Π° Π²Π΅ΡΡ Π½ΡΡ ΡΠΊΡΡΠ²Π°Π΅Ρ. ΠΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½ΡΠΆΠ΅Π½ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ Π²ΠΈΠ΄ β ΡΠ²Π΅ΡΡ Ρ, Π²ΠΎΡ ΠΎΠ½:
ΠΠ° ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΡΡ Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ Π²ΠΈΠ΄Π½ΠΎ Π·Π°ΡΠΎΡΠΊΡ ΠΏΠ΅ΡΡΠ΅Π² ΡΠ²Π΅ΡΡ Ρ. ΠΠ΄Π΅ΡΡ ΡΠΎΠΆΠ΅ Π²ΠΈΠ΄Π½Π° ΡΠ°Π·Π½ΠΈΡΠ°: Π²ΡΡΠΎΡΠ° Π½Π°ΠΊΠΎΠ½Π΅ΡΠ½ΠΈΠΊΠ° ΠΈΡΠ°Π»ΠΈΠΊΠ°, Π½Π°Π·ΠΎΠ²ΡΠΌ ΡΡΠΎ ΡΠ°ΠΊ, Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΡΡΠ°Π±Π°. ΠΠΎΡ ΠΎΠ± ΡΡΠΎΠΌ Ρ ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΠΏΠΈΡΠ°Π» Π² Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠΎΠ΄Π²Π΅Π΄Ρ ΠΈΡΠΎΠ³: ΠΎΠ±Π΅ Π·Π°ΡΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ° ΠΏΠ»ΠΎΡΠΊΠΈΠ΅, ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ β Π² ΡΠΎΡΠΌΠ΅ Π½Π°ΠΊΠΎΠ½Π΅ΡΠ½ΠΈΠΊΠ°, ΡΠ΅Π·ΠΊΠΎΡΡΠΈ ΡΠ³Π»ΠΎΠ² Π·Π°ΡΠΎΡΠΊΠΈ ΠΈ ΡΠΊΠΎΡΠ°Ρ
, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ Π²Π»ΠΈΡΡΡ Π½Π° ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠ°Π΄Π΅ΡΡΡ, ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΠΊ ΡΡΠΈΠΌ ΡΠ°ΠΊΠΈΠΌ ΠΏΠΎΡ
ΠΎΠΆΠΈΠΌ ΠΈ ΡΠ°ΠΊΠΈΠΌ ΡΠ°Π·Π½ΡΠΌ ΠΏΠ΅ΡΡΡΠΌ.
Π Π΅ΡΠ»ΠΈ ΠΎΡΡΠ°Π»ΠΈΡΡ, ΠΎΡΡΠ°Π²Π»ΡΠΉΡΠ΅ ΠΈΡ
Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
, ΠΏΠΈΡΠΈΡΠ΅ Π² Π»ΠΈΡΠΊΡ ΠΈ Π½Π° ΠΏΠΎΡΡΡ.
Π ΠΎΠΌΠ°Π½ Β«ΠΠ°Π½ΡΠΌΠ΅Π½Β» ΠΠ΅Π»ΠΎΠΏΡΡ ΠΎΠ²
ΠΠΎΡΠ΅ΠΌΡ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½ ΠΌΠ°ΡΡΠΈΡΠ½ΡΠΉ ΡΡΠ°Π±? | Π‘Π°ΠΉΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠ° Π² ΠΠΈΠ΅Π²Π΅
5-ΠΎΡΠ΅Π²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ½ΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈΠ½ΡΠΎΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π² ΡΡΠ΅ΡΠ΅ ΡΠΎΡΠΎ-ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π°Π±ΠΈΡΠΎ ΡΠΆΠ΅ ΠΏΠΎ-ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΡ. Sony, Panasonic ΠΈ Olympus ΠΎΡΠ΅Π½Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π²Π½ΡΡΠ°ΡΡ Π½Π΅ΠΈΡΠΊΡΡΡΠ½Π½ΡΠΌ Π»ΡΠ΄ΡΠΌ, ΡΡΠΎ ΠΈΠΌ ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΡΡΡ ΡΠ΄Π²ΠΈΠ³Π° ΠΌΠ°ΡΡΠΈΡΡ. Π Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠΈΠ²Π΅, ΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π±ΠΎΠΌΠ±Π° ΠΈ Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. ΠΡΠΎ ΠΊΠ°ΠΊ Π²ΠΎΠ»ΡΠ΅Π±Π½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° Β«ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅Π΄Π΅Π²ΡΒ».
ΠΠ°ΡΡΠΈΡΠ½Π°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ°Π΅Ρ Π²ΡΡ, β Π²ΠΎ Π²ΡΡΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΡΡΠΎ Π²Π΅ΡΠΈΡ ΡΠΆΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΡΠΎ/Π²ΠΈΠ΄Π΅ΠΎ-Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ. Π― ΠΏΠΎΠ΄ΡΡΡΠΊΠΈΠ²Π°Ρ, ΡΡΠΎ ΡΠ΅ΡΡ ΠΈΠ΄ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎ Π»ΡΠ±ΠΈΡΠ΅Π»ΡΡ
. Π ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅ΡΠ΅ Π΄Π»Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ°ΡΠΈΠ²Ρ/ΠΌΠΎΠ½ΠΎΠΏΠΎΠ΄Ρ/ΡΡΠ΅Π΄ΠΈΠΊΠ°ΠΌΠΈ/Π³Π»Π°ΠΉΠ΄ΠΊΠ°ΠΌΡ/ΡΠ΅Π»ΡΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠ°ΡΡΠΈΡΠ½Π°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡΠΎΠ³ΠΈΡ
ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΠΊΠΈΠ½ΠΎ-ΠΊΠ°ΠΌΠ΅ΡΠ°Ρ
, Π½Π° Π½Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΎΠ³ΡΠ°ΡΡ Π² ΡΡΡΠΌΠΊΠ°Ρ
, Π³Π΄Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ.
ΠΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π»Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³ΠΎΠ²ΡΠΌ ΠΎΡΡΠΆΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ² ΡΠ΅Ρ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡ ΡΠ°ΠΌΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ Π²Π½Π΅Π΄ΡΠΈΠ»ΠΈ.
ΠΠ½Π΅ Π΄ΠΎΡΠ°Π΄Π½ΠΎ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΡΠ΄ΠΈ Π·Π°ΡΠ°ΡΠΎΠ²Π°Π½Π½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΡΡΠΈ Π΄Π²Π° ΡΠ»ΠΎΠ²Π° Β«ΠΌΠ°ΡΡΠΈΡΠ½ΡΠΉ ΡΡΠ°Π±Β», Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ Π²ΠΎΠΎΠ±ΡΠ΅, Π³Π΄Π΅ ΡΡΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π ΠΠΠΠ¬ΠΠ Π²Π°ΠΆΠ½ΠΎ.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ ΡΠ°ΠΉΡΠ° dphotoworld.net:
Π ΠΎΠ±ΡΠΈΡ
ΡΠ΅ΡΡΠ°Ρ
Π·Π΄Π΅ΡΡ Ρ
ΠΎΡΠΎΡΠΎ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΡΡΡΡ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. ΠΠ΅Π½Ρ ΠΎΠ³ΠΎΡΡΠ°Π΅Ρ ΠΏΡΡΠ°Π½ΠΈΡΠ° Π² Π³ΠΎΠ»ΠΎΠ²Π°Ρ
Π»ΡΠ΄Π΅ΠΉ, Π΄ΡΠΌΠ°ΡΡΠΈΡ
, ΡΡΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΡΠΎΠΉ ΡΠ°ΠΌΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ½ΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΠ΅Ρ. ΠΡΠΎ Π½Π΅ ΡΠ°ΠΊ.
ΠΠ°ΡΡΠΈΡΠ½Π°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π² Π²ΠΈΠ΄Π΅ΠΎ
ΠΡΠ΅Π΄ΠΏΠΎΡΡΠ»ΠΊΠ° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΡΠΈ ΡΡΡΠΌΠΊΠ΅ Π²ΠΈΠ΄Π΅ΠΎ β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΏΡΠΈ ΡΡΡΠΌΠΊΠ΅ Ρ ΡΡΠΊ. Π ΡΠ΅ΠΎΡΠΈΠΈ Π·Π²ΡΡΠΈΡ ΠΊΡΠ°ΡΠΈΠ²ΠΎ, Π½ΠΎ Π½Π΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, Π±Π΅Π·Π·Π΅ΡΠΊΠ°Π»ΠΊΠΈ, Π³Π΄Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ° ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠ΅ ΠΈ Π½Π΅ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅. ΠΡΠ»ΠΈ Π²Ρ Π²ΠΎΠ·ΡΠΌΠ΅ΡΠ΅ Π»ΡΠ±ΡΡ ΠΏΠΎΠ»Π½ΠΎΠΊΠ°Π΄ΡΠΎΠ²ΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ Sony Ρ Ρ
ΠΎΡΠΎΡΠΈΠΌ ΡΠΎΠ΄Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΌ, ΡΠΎ ΠΎΡΡΡΠΈΡΠ΅ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ½Π° Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ Π»Π΅ΠΆΠΈΡ Π² ΡΡΠΊΠ΅ ΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΡΠΈΠΊΠ° ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΠ²Π°Π΅Ρ ΠΊΠ°ΠΌΠ΅ΡΡ.
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ ΡΡΡΠΌΠΊΠ΅ Ρ ΡΡΠΊ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ
Π²ΠΈΠ±ΡΠ°ΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΠ΅, ΡΠ΅ΠΌ Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ Π΄Π΅ΡΠΆΠ°Π»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΠΌΠ΅ΡΡ Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΌ Ρ
Π²Π°ΡΠΎΠΌ ΠΈ Ρ
ΠΎΡΠΎΡΠΈΠΌ Π±Π°Π»Π°Π½ΡΠΎΠΌ. Π’ΠΎ Π΅ΡΡΡ, ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π° Π²Π²ΠΈΠ΄Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ ΡΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° Π½Π΅ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΠΉ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΡΠΎΠ°ΠΏΠΏΠ°ΡΠ°Ρ. ΠΠ°ΠΌΠ΅ΡΡ Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΡΠΊΠΎΡΡΠΊΠΎΠΉ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΡΡΡΠ΅ ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±Π»Π΅Π½Ρ Π΄Π»Ρ ΡΡΡΠΌΠΊΠΈ Ρ ΡΡΠΊ.
ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΌΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ. Π‘Π΄Π²ΠΈΠ³ ΠΌΠ°ΡΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ . Π Π°Π±ΠΎΡΠ° ΠΌΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΎΡΠ° Π΄Π°ΠΆΠ΅ Π² ΡΠ΅ΠΎΡΠΈΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ³Π°ΡΠΈΡΡ Π»ΡΠ±ΡΠ΅ Π²ΠΈΠ±ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΠΌΠ΅ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΠΈΠΊΠ°ΠΌΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΡΠΌΠΊΠ° Ρ ΡΡΠΊ Ρ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΊΡΠ΅ΠΏΠΊΠΎ Π΄Π΅ΡΠΆΠΈΡΠ΅ ΠΊΠ°ΠΌΠ΅ΡΡ (ΠΎ ΡΡΠΌ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠ½ΠΊΡΠ΅).
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΡΠΎΡ ΠΏΡΠ½ΠΊΡ, ΡΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠ°ΠΌΠ΅ΡΡ Sony Alpha ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ·ΠΊΠΈΠΉ Π±Π°ΠΉΠΎΠ½Π΅Ρ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠ°Π΄ΡΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΌΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΎΡΠ° ΡΠ°ΠΌ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π°.
ΠΠ°ΡΡΠΈΡΠ½ΡΠΉ ΡΡΠ°Π± ΠΎΡ Sony Π½Π΅ΡΠ΅Π΄ΠΊΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΡΡΠΈΠΌΠΎ Ρ
ΡΠΆΠ΅, ΡΠ΅ΠΌ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π² ΠΎΠΏΡΠΈΠΊΠ΅ Π΄ΡΡΠ³ΠΈΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ. ΠΡΠΎΠ³ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΠΊΠ°ΠΌΠ΅ΡΠ°Ρ
ΡΠΈΡΡΠ΅ΠΌΡ Micro 4/3, Π³Π΄Π΅ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΠ°ΡΡΠΈΡΡ ΠΊ Π΄ΠΈΠ°ΠΌΠ΅ΡΡΡ Π±Π°ΠΉΠΎΠ½Π΅ΡΠ° ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠ΅Π΅. Π’Π°ΠΌ ΠΌΠ°ΡΡΠΈΡΠ½Π°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π½Π° ΠΊΠ°ΠΌΠ΅ΡΠ°Ρ
Sony.
ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ ΠΌΠ°ΡΡΠΈΡΠ½ΡΠΉ ΡΡΠ°Π±?
Π§ΡΠ΄Π΅Ρ Π½Π΅ Π±ΡΠ²Π°Π΅Ρ. ΠΡΠ»ΠΈ Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΡΠ½ΡΡΡ ΡΠΎΡΠΎ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Π²ΡΠ΄Π΅ΡΠΆΠΊΠΎΠΉ (1 ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΈ Π΄Π»ΠΈΠ½Π½Π΅Π΅), Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠ°ΡΠΈΠ². ΠΡΠ»ΠΈ Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Ρ Π°ΠΌΠΏΠ»ΠΈΡΡΠ΄Π½ΡΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ (Ρ ΠΎΠ΄ΡΠ±Π° ΠΈΠ»ΠΈ Π±Π΅Π³), Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΡΠ΅Π΄ΠΈΠΊΠ°ΠΌ. Π‘Π΄Π²ΠΈΠ³ ΠΌΠ°ΡΡΠΈΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ»ΡΠ½ΡΠ΅ ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΡ, ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ. Π‘ΡΠ°Π·Ρ ΡΠΊΠ°ΠΆΡ, ΠΈ ΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΡΠ΄Π° Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ.
ΠΠ°ΠΊ Π±ΡΡΡ Ρ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ?
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅. ΠΠΎ ΡΡΡΠ΅ΠΊΡΡ ΡΡΠΈ Π΄Π²Π΅ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆΠΈ. ΠΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΈΠ²Ρ Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠΎΠΉ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π΄Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΊΠΈ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π±ΡΠ΄Π΅Ρ Π³ΠΎΠ΄Π½ΡΠΌ ΠΊ ΠΏΡΠΎΡΠΌΠΎΡΡΡ.
Π₯ΠΈΡΡΠΎΡΡΡ ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΡΠΎΠΊΠΎΡΠ³ΠΎΠ»ΡΠ½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΈΠ²ΠΎΠ². ΠΠ»ΠΈΠ½Π½ΠΎΡΠΎΠΊΡΡΠ½Π°Ρ ΠΎΠΏΡΠΈΠΊΠ° ΡΡΠΆΠ΅Π»Π΅Π΅ ΠΏΠΎΠ΄Π΄Π°ΡΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΏΡΠΎΡΠ΅ΠΌ ΡΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ΅Π»Π΅Π²ΠΈΠΊΠΎΠ² ΠΊΠ°ΠΊ Canon 100-400mm f4.5-5.6L II ΠΈΠ»ΠΈ Canon EF 70-300mm f4.5-5.6 IS USM III ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ½ΠΈΠΌΠ°ΡΡ Ρ ΡΡΠΊ ΠΏΡΠΈ ΠΎΡΠ΅Π½Ρ Π΄Π»ΠΈΠ½Π½ΡΡ
Π²ΡΠ΄Π΅ΡΠΆΠΊΠ°Ρ
(ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠΉ ΠΎΠΏΡΠΈΠΊΠΈ). ΠΠ½Π΅ Π»ΠΈΡΠ½ΠΎ ΡΠ΄Π°Π²Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π·ΠΊΠΈΠ΅ ΠΊΠ°Π΄ΡΡ ΠΏΡΠΈ 300ΠΌΠΌ ΠΈ Π²ΡΠ΄Π΅ΡΠΆΠΊΠ΅ 1/25. ΠΠ°Π΄ΠΎ ΡΡΠΎΡΠ½ΠΈΡΡ, ΡΡΠΎ Ρ ΡΠ½ΠΈΠΌΠ°Π» Π½Π° ΠΊΠ°ΠΌΠ΅ΡΡ Ρ ΠΊΡΠ΅ΠΏΠΊΠΈΠΌ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠΌ Ρ
Π²Π°ΡΠΎΠΌ β Canon R. ΠΠΎΠ²ΡΠΎΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΡΠ΅ΠΏΠΊΠΎ Π΄Π΅ΡΠΆΠ°ΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ, Π²Ρ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΎΡΠ° β Π±ΡΠ΄Ρ ΠΎΠ½ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΡΠ½ΡΠΉ.
ΠΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅?
Π ΡΠ΅Π»ΠΎΠΌ Π½Π΅Π»ΡΠ·Ρ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ· ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π»ΡΡΡΠ΅. Π ΡΠ° ΠΈ Π΄ΡΡΠ³Π°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ β ΠΠΠΠΠΠΠ ΠΏΠΎΠΌΠΎΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΡΡΡΠΌΠΊΠ΅ Ρ ΡΡΠΊ. ΠΠ°Π΄ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, Π² ΠΊΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΈ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅.
Π’Π°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ Π½ΡΠΆΠ½Π° ΠΏΡΠΈ ΡΠ΅ΠΏΠΎΡΡΠ°ΠΆΠ½ΠΎΠΉ ΡΡΡΠΌΠΊΠ΅ ΠΈ ΡΡΡΠ΄ΠΈΠΉΠ½ΠΎΠΉ ΡΠΎΡΠΎΡΡΡΠΌΠΊΠ΅ (Ρ.
ΠΊ. Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠ°Π²ΠΈΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΊΡΡ Π²ΡΠ΄Π΅ΡΠΆΠΊΡ, ΡΡΠΎΠ± Π½Π΅ ΡΠΌΠ°Π·ΡΠ²Π°ΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ Π»ΡΠ΄Π΅ΠΉ), ΠΏΡΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠΌΠΊΠ΅ (Ρ.ΠΊ. Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΠ²), Π΄Π»Ρ Π½ΠΎΡΠ½ΡΡ
ΠΏΠ΅ΠΉΠ·Π°ΠΆΠ΅ΠΉ (Ρ.ΠΊ. Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ Ρ
ΠΎΡΠΎΡΠ΅Π΅ ΡΠΎΡΠΎ, Π½Π°Π΄ΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π±ΡΠ°ΡΡ ΡΡΠ°ΡΠΈΠ²).
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΡΡΠΌΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎ, ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΡΠΌΠΊΠΈ Ρ ΡΡΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°Π²Π½ΡΠΌ ΡΡΠΏΠ΅Ρ ΠΎΠΌ ΠΊΠ°ΠΊ Ρ ΠΌΠ°ΡΡΠΈΡΠ½ΠΎΠΉ, ΡΠ°ΠΊ ΠΈ Ρ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈ Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ²Π½ΡΠΌΠΈ ΠΈ ΠΊΡΠ΅ΠΏΠΊΠΈΠΌΠΈ ΡΡΠΊΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡ Π² ΠΊΠ°Π΄ΡΠ΅ ΠΈ Π΄Π΅Π»Π°ΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΠΎΠΉ, Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ (Π²ΡΠΎΠ΄Π΅ ΡΡΠ΅Π΄ΠΈΠΊΠ°ΠΌΠ°) Π²Π°ΠΌ Π½Π΅ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ.
Π‘ΠΌΡΡΠ» ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π² ΡΠΎΠΌ, ΡΡΠΎΠ± ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, ΡΡΠΎ ΠΌΠ°ΡΡΠΈΡΠ½ΡΠΉ ΡΡΠ°Π± β ΡΡΠΎ Π½Π΅ ΠΏΠ°Π½Π°ΡΠ΅Ρ ΠΈ Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ. Π₯ΠΎΡΠΎΡΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΅ΡΡΡ. ΠΠΎ Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅Ρ, Π½ΠΎ Π΅ΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠΈΠ²Π΅, Π²Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ΅ΡΡΠ΅ΡΠ΅.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΎΡ Merriam-Webster
\ ΛStΙb \ Π± : ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΠΊΡΡΠΎΠΊ, ΠΎΡΡΠ°Π²ΡΠΈΠΉΡΡ Π½Π° ΡΡΠ΅Π±Π»Π΅ ΠΈΠ»ΠΈ ΡΡΠ²ΠΎΠ»Π΅, Π³Π΄Π΅ Π²Π΅ΡΠ²Ρ Π±ΡΠ»Π° ΠΏΠΎΡΠ΅ΡΡΠ½Π°.
2 : ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°Π½Π½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·Π½ΠΎΡΠ΅Π½Π½ΠΎΠ΅ Π΄ΠΎ ΠΊΠΎΡΠΎΡΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΡΡΠΏΠΎΠΉ ΡΠΎΡΠΌΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ : ΡΡΡΠΊΠ° Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌ ΡΡΠΏΡΠΌ Π½Π°ΠΊΠΎΠ½Π΅ΡΠ½ΠΈΠΊΠΎΠΌ
3 : ΠΊΠΎΡΠΎΡΠΊΠ°Ρ ΡΡΠΏΠ°Ρ ΡΠ°ΡΡΡ, ΠΎΡΡΠ°Π²ΡΠ°ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Π±ΡΠ»Π° ΡΠ»ΠΎΠΌΠ°Π½Π° ΠΈΠ»ΠΈ ΠΈΠ·ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ²Π°Π½Π° ΠΎΠ³ΡΡΠ·ΠΎΠΊ ΠΊΠ°ΡΠ°Π½Π΄Π°ΡΠ°
4 : ΡΡΠΎ-ΡΠΎ ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ ΠΈΠ»ΠΈ Π½ΠΈΠ·ΠΊΠΎΡΠΎΡΠ»ΠΎΠ΅
5Π° : Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Π»ΠΈΡΡΠ° (ΠΊΠ°ΠΊ ΡΠ΅ΠΊΠΎΠ²Π°Ρ ΠΊΠ½ΠΈΠΆΠΊΠ°), ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½Π°Ρ ΠΊ ΠΊΠΎΡΠ΅ΡΠΊΡ Π΄Π»Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΎΡΠΎΡΠ²Π°Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ
Π± : ΡΠ°ΡΡΡ Π±ΠΈΠ»Π΅ΡΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π½ΡΠΉ Π³Π»Π°Π³ΠΎΠ»
1Π° : Π²ΡΠΊΠ°ΡΠΌΠ»ΠΈΠ²Π°ΡΡ Ρ ΠΊΠΎΡΠ½Π΅ΠΌ
Π± : ΠΎΡΠΈΡΡΠΈΡΡ (Π²ΡΡΠ°Π΄ΠΈΡΡ) ΠΏΡΡΠ΅ΠΌ Π²ΡΠΊΠΎΡΡΠ΅Π²ΡΠ²Π°Π½ΠΈΡ ΠΊΠΎΡΠ½Π΅ΠΉ
c : ΡΡΠ±ΠΈΡΡ ΠΈΠ»ΠΈ ΡΡΠ±ΠΈΡΡ (Π΄Π΅ΡΠ΅Π²ΠΎ) Ρ Π·Π΅ΠΌΠ»ΠΈ
2 : Π΄Π»Ρ ΡΡΡΠ΅Π½ΠΈΡ (ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΈΠ³Π°ΡΠ΅ΡΡ) ΠΏΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π°Π²Π»ΠΈΠ²Π°Π½ΠΈΡ
3 : ΡΠ΄Π°ΡΠΈΡΡ (Π½ΠΎΠ³ΠΎΠΉ ΠΈΠ»ΠΈ Π½ΠΎΡΠΊΠΎΠΌ) ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ
api — Π§ΡΠΎ Π·Π½Π°ΡΠΈΡ «Π·Π°Π³Π»ΡΡΠΈΡΡ» Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ?
Π ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ»ΠΎΠ²ΠΎ Β«Π·Π°Π³Π»ΡΡΠΊΠ°Β» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ Β«ΠΌΠ°ΠΊΠ΅ΡΒ», Π½ΠΎ Π΄Π»Ρ ΡΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΠΎΡΠ½ΠΎΡΡΠΈ Π°Π²ΡΠΎΡΡ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Β«ΠΌΠ°ΠΊΠ΅ΡΒ», ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Β«ΠΌΠ°ΠΊΠ΅ΡΒ» — ΡΡΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° Π·Π°Π³Π»ΡΡΠΊΠ°, Π½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ .
Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΏΡΡΠ°Π½ΠΈΡΡ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π·Π°Π³Π»ΡΡΠΊΠ°.
Π ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π·Π°Π³Π»ΡΡΠΊΠ° — ΡΡΠΎ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, Π½ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π°, ΠΎΠ½Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΏΠ°ΠΌΡΡΠΈ, Π΄Π»Ρ Π΅Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΠΌΠ°ΡΡΠ°Π»Π»ΠΈΠ½Π³ / ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ / Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² (ΠΈ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ), ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ / Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π·Π°Π³Π»ΡΡΠΊΠΈ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠΊΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΊΡΠΈ Π² Java).
ΠΠΎΠΊ — ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΠΈΠΉ Π²ΠΈΠ΄ Π·Π°Π³Π»ΡΡΠΊΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠ°ΠΊΠ΅Ρ — ΡΡΠΎ Π·Π°ΠΌΠ΅Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΌΡ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠΎΠΊΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²) Π΄Π»Ρ Π·Π°ΠΌΠ΅Π½Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ°ΠΊΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ Π²ΠΈΠ΄Ρ Π·Π°Π³Π»ΡΡΠ΅ΠΊ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ( RPC ) ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ( RMI , CORBA ).ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² / Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π³Π»ΡΡΠ΅ΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΈΡ Π²ΡΡΡΠ½ΡΡ. ΠΠ°Π³Π»ΡΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ IDL (Π½ΠΎ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠ·ΡΠΊ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²).
ΠΠ±ΡΡΠ½ΠΎ Π² RPC, RMI, CORBA ΠΈ Ρ.Π΄. ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° , ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π·Π°Π±ΠΎΡΡΡΡΡ ΠΎ ΠΌΠ°ΡΡΠ°Π»ΠΈΠ½Π³Π΅ / ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΠΈ Π·Π°Π³Π»ΡΡΠΊΠ°Ρ
Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° , ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ Π΄Π΅ΠΌΠ°ΡΡΠ°Π»ΠΈΠ½Π³Π΅ / Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ / ΠΌΠ΅ΡΠΎΠ΄.
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π·Π°Π³Π»ΡΡΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π° Π·Π°Π³Π»ΡΡΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² (ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΠΊΠ°ΡΠΊΠ°ΡΠ°ΠΌΠΈ) ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ
ΠΎΡΠΎΡΠΈΡ
ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ
ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ
Π·Π°Π³Π»ΡΡΠ΅ΠΊ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠ΅Π΄ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ RMI ΠΈ CORBA, ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ ΡΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π½Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΈΠ·Π±Π΅Π³Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΡΠ΅Π΄Π°Ρ
REST. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π² ΡΡΠ΅Π΄Π°Ρ
REST ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ JavaScript ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-Π·Π°Π³Π»ΡΡΠΊΠΈ Π΄Π»Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ² AJAX (ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ JSON.ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ ΠΈ JSON.stringify ). ΠΡΠΎΠ΅ΠΊΡ Swagger Codegen ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ REST Π½Π° ΡΠ°Π·Π½ΡΡ
ΡΠ·ΡΠΊΠ°Ρ
.
mocking, stubbing, ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ mocking ΠΈ stubbing
Π ΡΡΠ°ΡΡΠ΅ Β«ΠΠ°ΠΊ ΠΈ Π³Π΄Π΅ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ ΡΡΠ΅Π΄ΡΒ» Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» ΠΎ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Ρ: ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ
ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ.
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²ΠΈΠ΄ ΡΠ΅ΡΡΠΎΠ².
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ , ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΡΠΎΠ²Π½Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ°: ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Ρ. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ ΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ Π»ΡΡΡΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ.
ΠΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ (ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π·Π΄Π΅ΡΡ Π²Π½ΠΈΠ·Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Ρ) Π½Π΅Π΄ΠΎΡΠΎΠ³ΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±ΡΡΡΡΠΎ. ΠΠΎΠ»Π°Π³Π°ΠΉΡΠ΅ΡΡ Π½Π° Π½ΠΈΡ . Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΠΈΡΡΠ΅ΡΠΏΠ°Π»ΠΈ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠΈΡ ΡΠ΅ΡΡΠΎΠ², Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠΈΠΌ ΡΠ΅ΡΡΠ°ΠΌ (ΠΊΠ°ΠΊ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ°ΠΊ ΠΈ ΠΏΠΎ ΡΠ΅ΡΡΡΡΠ°ΠΌ), ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΡΡ ΠΈ ΡΠ΅ΡΡΡ ΡΡΠΎΠ²Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Π ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎΠ± Π°ΡΡΠΎΡΡΠΈΠΌΠ΅Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π² Π½Π°Π±ΠΎΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΈ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠΎΠ³Π΄Π°, ΠΏΠΎΡΠ΅ΠΌΡ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. Π― ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΡΠ°Π·Π½ΡΡ
ΡΡΠΎΠ²Π½ΡΡ
ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡ
ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ, Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (TDD ΠΈ BDD).
ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ mocking ΠΈ stubbing?
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ mocking ΠΈ stubbing ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ².ΠΠ΄Π½Π°ΠΊΠΎ Ρ Ρ ΠΎΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΡΠΎΠ²Π½ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅?
Mocking ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΈΠ»ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΡ, ΠΏΠΎΠΌΠΎΠ³Π°Ρ Π²Π°ΡΠΈΠΌ ΡΠ΅ΡΡΠ°ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅. ΠΠΎΠ³Π΄Π° Π²Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π° Π½Π΅ Ρ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΠ΅Ρ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠΏΠΈΠΊΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅?
ΠΠ°Π³Π»ΡΡΠΊΠ°, ΠΊΠ°ΠΊ ΠΈ Π½Π°ΡΠΌΠ΅ΡΠΊΠ°, ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ, Π½ΠΎ Π·Π°Π³Π»ΡΡΠΊΠ° ΠΈΠΌΠΈΡΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ Π²Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ.ΠΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠ³Π΅, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΠΎΠ΅ ΡΠ°Π·Π½ΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·Π΄Π΅Π²Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ [Π·Π΄Π΅ΡΡ].
(Https://martinfowler.com/articles/mocksArentStubs.html) {: target = β_ blankβ rel = βnoreferrer noopenerβ}
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π²ΡΠ΅Ρ ΡΡΠΎΠ²Π½ΡΡ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Ρ Π²ΡΡΠ΅.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ Π² ΡΠ΅ΡΡΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²
Π― ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠΈΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ Π·Π°Π³Π»ΡΡΠΊΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΈΠ»ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
.ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ ΡΠ΅ΡΡ, Π²Ρ ΡΡΠ΅Π½ΠΈΡΡΠ΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ , Π²Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅ΡΠ΅ Π΅ΠΉ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ». ΠΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°, Π° Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈ ΡΠ΄Π°Π»ΡΠ΅Ρ, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΡΠΈΡΡΠΊΠ° ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π²Π°ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π°Π»ΡΡΡ Π²ΡΡΡΠ½ΡΡ. ΠΡΠΎ ΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠΌΠ΅ΡΠΊΠ° / Π·Π°Π³Π»ΡΡΠΊΠ° ΠΌΠΎΠ³ΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΌΠΎΡΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ Π·Π°Π³Π»ΡΡΠ΅ΠΊ Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ΅ΡΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΡΠ΅ΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π² /tmp/test_file.txt, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΄Π°Π»ΡΠ΅Ρ Π΅Π³ΠΎ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ; Π΄Π΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π³Π»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ Π½Π° Π²ΡΠ·ΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΡΠΎ Π·Π°ΠΉΠΌΠ΅Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Π΅ΡΠ½Π΅ΡΡΡ.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ΅ΠΌ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅.Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π²Ρ Ρ ΠΎΡΠ΅Π»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. ΠΠ°ΠΏΠΈΡΡ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΡΡΡΠ΄Π½Π΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ, Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ, — ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π°Π³Π»ΡΡΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΠΊΠ΅ΡΠ° ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ
def read_and_trim (ΠΏΡΡΡ_ΡΠ°ΠΉΠ»Π°)
return os.open (file_path) .rstrip ("\ n") # ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°ΠΉΠ»Π° ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΠΏΡΡΠΈ ΠΈ ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ
ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°ΡΠΎΡΠ° ΡΡΡΠΎΠΊΠΈ.
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΎΡΠΊΡΡΡΠΈΡ Python, ΠΊΠΎΡΠΎΡΠ°Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π΄Π»Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°ΠΉΠ»Π° ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΠΏΡΡΠΈ.ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, Π³Π΄Π΅ ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ ΡΠ΅ΡΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
- ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΊΠ°ΡΡ ΡΠ΅ΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ; ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½Π΅Ρ, ΡΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ.
- Π’Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΎΡΠ²Π΅ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°; Π΅ΡΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΈΡΡΠ΅ΡΠ΅Ρ, ΡΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎΠΉΠ΄Π΅Π½.
ΠΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»ΡΡΠ°Π΅Π² ΠΎΡΠΊΠ°Π·Π° Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ ΡΠΌΠΎΠ³Π»Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. ΠΡΠΈ ΡΠ΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π½ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΠΎΡΠ²Π΅ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°), Π½ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΠΈ ΠΎΡΠ²Π΅ΡΠ°).
Π’Π΅ΡΡΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΡΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
@ unittest.mock.patch ("builtins.open", new_callable = mock_open, read_data = "ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° \ n")
def test_read_and_trim_content (self, mock_object):
self.
assertEqual (read_and_trim ("/ fake / file / path"), "ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°")
mock_object.assert_called_with ("/ ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΡΠΉ / ΡΠ°ΠΉΠ» / ΠΏΡΡΡ")
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΠ°ΡΡ Python Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΠΎΡΡΡΠΎΠΈΠ»ΠΈ.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠΈΡΠ°ΡΠΎΡΠΎΠ² ΠΈ Π·Π°Π³Π»ΡΡΠ΅ΠΊ Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ — ΡΡΠΎ ΠΈΠΌΠΈΡΠ°ΡΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΠ΅, ΡΠ΄Π°Π»ΡΠ΅Ρ Π»ΠΈ Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° Π²Ρ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ. Π’Π΅ΡΡ ΠΏΡΠΎΠΉΠ΄Π΅Π½. ΠΠΎ Π·Π°ΡΠ΅ΠΌ, Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Π·, ΠΊΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ (ΠΊΡΠΎ Π½Π΅ Π²Ρ) Π½Π΅ Π·Π½Π°Π΅Ρ, ΡΡΠΎ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ. Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΅ΡΡ Π½Π΅ ΡΠ΄Π°Π»ΡΡ. ΠΠ΅ Π±ΡΠ»ΠΎ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π½Π΅ Π·Π½Π°Π»ΠΈ, ΡΡΠΎ ΠΈΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ Π½Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΡΠ΅ΡΡ.
Π ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
ΡΠ»ΡΡΠ°ΡΡ
Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°. ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΡΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΊΡΠΎ-ΡΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΠΎΠΊΠΈΠ½Π³ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠ° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΠΎΠΊΠΈ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½Ρ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ². ΠΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π²Π°ΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌ ΡΠ΅ΡΡΠ°ΠΌ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ ΠΈ Π΄Π΅ΡΠ΅Π²ΡΠΌΠΈ, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅.
ΠΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈΡΠ°ΡΠΎΡΠΎΠ² ΠΈ Π·Π°Π³Π»ΡΡΠ΅ΠΊ Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΌ / ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΠΎΠΌ ΡΠ΅ΡΡΠ΅ — ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠΎΠΌ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ Π·Π°Π³Π»ΡΡΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π°, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π²Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. ΠΠΌΠΈΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π°ΡΠ΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΡΡ Π²ΡΠ³ΠΎΠ΄Ρ ΠΎΡ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ°ΡΠΈ ΡΠ΅ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΡΡΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π²Π°ΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΉ ΡΠ΅ΡΡ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ Π±ΠΎΠ»ΡΡΠ΅ Π½Π° Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ΅ΠΌ Π½Π° ΠΎΠ±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΡΠ΅ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ.
ΠΡΡΡΠ΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΡΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠΊΡΠΈΠ²Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, Π²Π°ΡΠΈ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π²Π°Ρ ΠΊΠΎΠ΄. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΌ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. Π’Π΅ΡΡΡ — ΡΡΠΎ Π½Π΅ ΡΠΎ, ΡΡΠΎ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅, ΡΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΠΌΠ΅Π½ΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³, Π²Ρ Π½Π΅ΡΠ΅ΡΠ΅ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π·Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅ΡΡΠΎΠ² Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½ΠΈΠΌΠΈ.
Mocking Π² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠ΅ΡΡΠΎΠ² Π²Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ Π² ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅. ΠΠΎ Π² ΡΡΠΎΠΌ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΡΠΎΡΠ΅ΠΊ ΠΎΡΠΊΠ°Π·Π° ΠΈΠ·-Π·Π° ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΡΠ΅, Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π²ΡΠ΅ΠΌΡ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π― ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΡΡΠ·ΠΈΡΡ ΠΊΡΡΠ³ Π²ΠΎΠΏΡΠΎΡΠΎΠ², Π½Π°ΠΏΠΈΡΠ°Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΡΠΎΠ² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠΌΠΈΡΠ°ΡΠΎΡΡ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ. Π― ΠΏΠΎΠΊΠ°ΠΆΡ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π²Π°Ρ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΡΠΎΠ² Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ.
Π ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠ½ΠΈΡ-ΡΠ΅ΡΡΠΎΠ². ΠΠ΄Π΅ΡΡ Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΠ΅ΡΡ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π²Π°ΠΆΠ½Ρ. ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠΌΠ΅ΠΈΠ²Π°ΡΡ.
ΠΠΎΠΏΡΡΡΠΈΠΌ, Π²Π°Ρ ΠΊΠΎΠ΄ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ GitHub API, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ Π»ΠΈΡΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π°ΠΊΡΠΈΡ API GitHub Π½Π° Π²Π°Ρ Π·Π°ΠΏΡΠΎΡ, Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π΅Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ.ΠΠΌΠΈΡΠ°ΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ° GitHub API ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π½ΡΡΡΠΈ Π²Π°ΡΠ΅ΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π±Π°Π·Ρ ΠΊΠΎΠ΄Π°.
@ unittest.mock.patch ('Github')
def test_parsed_content_from_git (self, mocked_git):
expected_decoded_content = "b '# ΠΡΠΈΠΌΠ΅Ρ Hello World \ n \ n> ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ \ n \ n- ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° \ n \ n Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ \ n"
mocked_git.get_repo.return_value = ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ_decoded_content
parsed_content = read_parse_from content (repo = 'my / repo',
file_to_read = 'ΠΠ ΠΠ§ΠΠ’ΠΠ’Π¬.
ΠΌΠΊΡ ')
self.assertEqual (parsed_content ['Π½Π°Π·Π²Π°Π½ΠΈΡ'], ['ΠΡΠΈΠΌΠ΅Ρ Hello World'])
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΠ΅ΡΠΎΠ΄ read_parse_from_content ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ JSON ΠΈΠ· Π²ΡΠ·ΠΎΠ²Π° API GitHub. Π ΡΡΠΎΠΌ ΡΠ΅ΡΡΠ΅ ΠΌΡ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΡΠ΅ΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ°ΠΊΠ΅Ρ, Π²Π°Ρ ΡΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ Π±ΡΡΡΡΠ΅Π΅ ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π±ΡΠ΄Π΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ GitHub API. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΡ ΠΈ ΡΡΠΈΠ»ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ Π΄Π»Ρ ΡΡΠ΅Π΄Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ΅ΡΡ.ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΡΡ
Π²Π½Π΅ΡΠ½ΠΈΡ
ΡΠ»ΡΠΆΠ± ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠ°ΠΊ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±ΡΠ΄ΡΡ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΌΠΈΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ expected_decoded_content Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ GitHub Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° ΡΠ΅ΠΏΠΎ, Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ· ΠΈΠΌΠΈΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅. ΠΠ΅ΡΠ΅Π΄ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΉ ΠΎΡΠ²Π΅Ρ, Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ½ΠΈΠΌΠΎΠΊ Π²ΡΠ·ΠΎΠ²Π° Π²Π½Π΅ΡΠ½Π΅ΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ°.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΉ ΠΎΡΠ²Π΅Ρ ΡΠΎ ΡΠ½ΠΈΠΌΠΊΠΎΠΌ, ΡΡΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°ΡΡΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ API Π½Π° ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΠΎΠΊΠΈ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ Π² ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ (Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ²)
ΠΠΎΠ³Π΄Π° Π΄Π²Π΅ ΡΠ°Π·Π½ΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ, Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ Π΅ΡΡΡ Β«ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡΒ», Ρ. Π.ΡΡΠ°Π½Π΄Π°ΡΡΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ Π΄Π°ΡΡ ΠΈ ΡΡΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²Π·Π°ΠΌΠ΅Π½. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΡΠΌΠ°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π», API Ρ ΡΠ΅Π³Π°ΠΌΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΡΡΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΈΠΊΠΎΠ³Π΄Π°. ΠΠ»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ API Π²Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠΎΠΌ API ΠΈ ΠΎ ΡΠΎΠΌ, ΡΠ΅Π³ΠΎ ΠΎΡ Π½Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ. Π ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ΅ΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ API, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ Π½Π° Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° API.
ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ API, ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ΄Π΅Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΡΠ»ΡΠΆΠ±. ΠΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΡΡΠΏΠ½ΠΎΠΌΠ°ΡΡΡΠ°Π±Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅ΠΉ. Π’Π°ΠΊΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΈΠ³ΡΠ°ΡΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΎΠ²Π½ΡΠΌΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ / ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅.ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠΊΠ²ΠΎΠ·Π½ΠΎΠ΅ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡ Π΄Π²Π΅ Π²Π°ΠΆΠ½ΡΠ΅ Π²Π΅ΡΠΈ:
- ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ
- ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΠ²Π΅ΡΠ° ΠΎΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π±Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΎΠ² ΠΏΠΎΠ³ΠΎΠ΄Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠ΅ΡΠ΅ΠΎΡΠ»ΡΠΆΠ±Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΡΠ»ΡΠΆΠ±ΠΎΠΉ.
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΡΠ»ΡΠΆΠ±Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΡΠ»ΡΠΆΠ±Ρ ΠΏΠΎΠ³ΠΎΠ΄Ρ Ρ Π΄Π°ΡΠΎΠΉ (Π·Π°ΠΏΡΠΎΡΠΎΠΌ), ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΡΠ»ΡΠΆΠ±Π° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π΄Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ³ΠΎΠ΄Ρ Π½Π° ΡΡΡ Π΄Π°ΡΡ.Π£ ΡΡΠΈΡ
Π΄Π²ΡΡ
ΡΠ»ΡΠΆΠ± Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ: ΡΠ»ΡΠΆΠ±Π° ΠΏΠΎΠ³ΠΎΠ΄Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ»Π° Π΄ΠΎΡΡΡΠΏΠ½Π° Π΄Π»Ρ ΡΠ»ΡΠΆΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ»Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠ»ΡΠΆΠ±Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈ Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠΎΡΠΌΠ°ΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ Π² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΡΠ»ΡΠΆΠ±Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π·Π°ΠΏΡΠΎΡ ΡΠ»ΡΠΆΠ±Ρ ΠΏΠΎΠ³ΠΎΠ΄Ρ Π² ΡΠ΅ΡΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠΌΠΈΡΠ°ΡΠΈΡ ΠΎΡΠ²Π΅ΡΠ°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ, ΠΊΠΎΠ½Π΅ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° ΠΈ ΠΎΡΠ²Π΅Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ.ΠΡΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ ΠΎΠ±Π΅ ΡΠ»ΡΠΆΠ±Ρ ΠΎΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠΎΠ², ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΌΠΈ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌΠΈ.
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ°Π·Π½ΡΡ
ΡΠ΅ΡΡΠΎΠ² Π² ΡΠ°Π·Π½ΡΡ
ΡΡΠ΅Π΄Π°Ρ
ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ΅Π΄Π΅ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ.
ΠΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΊΠΈΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΡΡΠΈΡΡ ΡΠ°Π·Π½ΡΡ
ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΡΡ
ΡΠ΅ΡΡΠΎΠ² Π² ΡΠ°Π·Π½ΡΡ
ΡΡΠ΅Π΄Π°Ρ
Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ.ΠΠΎΠ³Π΄Π° ΡΡΠΎ ΡΡΠ΅Π΄Π° Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠ°ΠΊΠ°Ρ ΠΊΠ°ΠΊ Dev ΠΈΠ»ΠΈ CI, Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠ° Ρ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΡΠ΅Π»ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΡΡΠ΅Π΄Ρ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ Π² ΡΡΠ΅Π΄Ρ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠ°ΠΊΡΡ ββΠΊΠ°ΠΊ QA ΠΈΠ»ΠΈ Staging, ΡΠΎΡ ΠΆΠ΅ ΡΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π· ΡΠΈΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°, Π½ΠΎ Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π²Π½Π΅ΡΠ½Π΅ΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Mbtest — ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ² ΠΈ ΠΈΠ·Π΄Π΅Π²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΎΡΠ²Π΅ΡΠΎΠΌ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» Π²ΡΡΠ΅.
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠΎΠ²Π½Π΅ΠΉ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠΈΡΠ°ΡΠΎΡΠΎΠ² ΠΈ Π·Π°Π³Π»ΡΡΠ΅ΠΊ.Π ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ΅ΠΌ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ:
- Π’Π΅ΡΡΡ Ρ ΠΌΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ Π±ΡΡΡΡΠ΅Π΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΠ»ΡΠΆΠ±Π°ΠΌ. ΠΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΎΡΠ²Π΅ΡΠ°.
- Π£ Π²Π°Ρ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΡΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΠΎΡ
Π²Π°ΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠ°ΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ.
Π‘ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ Π²Ρ Π±Π΅ΡΡΠΈΠ»ΡΠ½Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΎΡΠΈΠ±Π°ΡΡΡΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ. ΠΠΎΠΊΠΈΠ½Π³ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²Ρ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅ΡΡΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, ΠΈ Π½Π΅ Π΄Π°Π΅ΡΠ΅ ΡΠ΅Π±Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ. - ΠΠΎΠΊΠΈΠ½Π³ Π²Π½Π΅ΡΠ½ΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² API ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π°Ρ ΡΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ
- ΠΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΌΠΈ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅
Π ΡΠ°Π·Π΄Π΅Π»Π΅ Β«Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠ°Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌΒ» ΠΈ Β«Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌΒ» ΠΌΡ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΉ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (TDD), ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ (BDD), ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ, ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°Π³Π»ΡΡΠΊΠΈ
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π·Π°Π³Π»ΡΡΠΊΠ°?
Π ΡΠΈΠ½Π°Π½ΡΠ°Ρ
Π·Π°Π³Π»ΡΡΠΊΠ° — ΡΡΠΎ ΡΠ΅Π½Π½Π°Ρ Π±ΡΠΌΠ°Π³Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅, Π±Π°Π½ΠΊΡΠΎΡΡΡΠ²ΠΎ ΠΈΠ»ΠΈ ΡΠ΅ΠΊΠ°ΠΏΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΡ ΠΊΠ°ΠΏΠΈΡΠ°Π»Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΡ Π°ΠΊΡΠΈΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.
Π‘ΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠ΅ Π°ΠΊΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΏΡΡΠ΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΠΈ ΠΎΠ±Π»ΠΈΠ³Π°ΡΠΈΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π² Π°ΠΊΡΠΈΠΈ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΡΠ΅ΡΠΌΠΈΠ½ Β«ΠΊΠΎΡΠ΅ΡΠΊΠ°Β» ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π±Π°Π»Π°Π½ΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠ΅ΠΊΠ°, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½Π°Ρ ΠΊΠ²ΠΈΡΠ°Π½ΡΠΈΡ ΠΈΠ»ΠΈ ΠΊΠ²ΠΈΡΠ°Π½ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠ΅ΡΠ° ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅Π΄Π° ΠΈΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΠΏΠ»Π°ΡΠ΅ΠΆΠ°.
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ
- ΠΠ°Π³ΠΎΡΠΎΠ²ΠΊΠ° — ΡΡΠΎ ΡΠ΅Π½Π½Π°Ρ Π±ΡΠΌΠ°Π³Π°, ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±Π°Π½ΠΊΡΠΎΡΡΡΠ²Π° ΠΈΠ»ΠΈ ΡΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΠΈ.
- ΠΠΊΡΠΈΠΈ-Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΡΠ³ΡΡΡΡΡ ΠΏΠΎ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΠ΅Π½Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΉ ΠΎΡΠ΅Π½ΠΊΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π°ΠΊΡΠΈΡΠΌΠΈ ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.
- ΠΠΊΡΠΈΠΈ-Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΡΠΌΠΈ Ρ Π²ΠΎΠ»Π°ΡΠΈΠ»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΡΠΌΠΈ ΡΠ΅Π½, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΡΡ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π° ΡΠΎΡΡΠ°.
ΠΠ±ΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ Π·Π°Π³Π»ΡΡΠΊΠ°Ρ
ΠΠ°Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ
ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ². ΠΡΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠ°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π°ΠΊΡΠΈΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡΡΠ΅Π΄ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
Π°ΠΊΡΠΈΠΎΠ½Π΅ΡΠΎΠ² Π½Π° ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π΅, ΡΠ°ΡΡΠΎ Π² ΡΠΎΡΠΌΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
Π΄ΠΈΠ²ΠΈΠ΄Π΅Π½Π΄ΠΎΠ².
ΠΡΠ΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π»ΠΈΡΠΎΠΌ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΈ ΡΠΎΠ²Π΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΎΠ².ΠΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠ°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ΄Π΅Π»ΠΈΡΡ 100% Π°ΠΊΡΠΈΠΉ ΡΠ²ΠΎΠ΅ΠΉ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ΄Π΅Π»ΠΈΡΡ 80% ΡΠ²ΠΎΠΈΠΌ Π°ΠΊΡΠΈΠΎΠ½Π΅ΡΠ°ΠΌ ΠΈ Π²Π»Π°Π΄Π΅ΡΡ ΠΌΠΈΠ½ΠΎΡΠΈΡΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΠ»Π΅ΠΉ ΠΌΠ΅Π½Π΅Π΅ 20% Π² Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠ°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π°ΠΊΡΠΈΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΡΡ
Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΡ
ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΠΉ, Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΠ΅ Π°ΠΊΡΠΈΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΈΠ½Π²Π΅ΡΡΠΎΡΠ°ΠΌΠΈ ΠΊΠ°ΠΊ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠ΅.
ΠΠΎΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π²ΡΡ
ΠΎΠ΄Π΅ ΠΈΠ· Π±Π°Π½ΠΊΡΠΎΡΡΡΠ²Π°.Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΡ
Π°ΠΊΡΠΈΠΉ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π»ΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΡΠ΅Π½Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠΈΡ
ΡΠ΅Π½Π½ΡΡ
Π±ΡΠΌΠ°Π³, ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ. ΠΡ
Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠ΅ ΡΠ΅Π½Ρ ΠΌΠΎΠ³ΡΡ ΠΎΡΡΠ°ΠΆΠ°ΡΡ Π½Π΅ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΡΡΠ½ΠΊΠ° Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ² ΡΠ΅ΠΊΠ°ΠΏΠΈΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠΡΠ° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΡ Π΄Π΅Π»Π°Π΅Ρ Π°ΠΊΡΠΈΠΈ-Π·Π°Π³Π»ΡΡΠΊΠΈ ΡΠ°ΡΡΠΎ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΡΠΌΠΈ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΡΠΌΠΈ ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΡ
ΠΎΠ΄Π½ΠΎΡΡΠΈ, Π΅ΡΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΡΠ΅ΡΡΠΏΠ΅ΡΡ Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΈΡΠΌΡ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΡΠΈΡΠΊΠΎΠΌ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΠΎΠ½Π½Π°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Salomon Brothers Π² 1980-Ρ
Π³ΠΎΠ΄Π°Ρ
ΡΠΎΠ·Π΄Π°Π»Π° ΠΈΠ½Π΄Π΅ΠΊΡ Π°ΠΊΡΠΈΠΉ-Π·Π°Π³Π»ΡΡΠ΅ΠΊ.Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠ΅Π·ΠΊΠΎ ΠΊΠΎΠ»Π΅Π±Π°Π»Π°ΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΡΡΠ½ΠΊΠ°. Π 1987 Π³ΠΎΠ΄Ρ ΠΎΠ½ ΡΠΏΠ°Π» Π½Π° 47,4% Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠ΅Π΄Π²Π΅ΠΆΡΠ΅Π³ΠΎ ΡΡΠ½ΠΊΠ° ΡΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°. S&P 500 ΡΠΏΠ°Π» Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠΊΡΠΎΠΌΠ½ΡΠ΅ 33% Π·Π° ΡΠΎΡ ΠΆΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄.
ΠΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ ΠΊΠΎΡΠ΅ΡΠΊΠΎΠ² Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π½Π° ΡΡΠΌΠΌΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ Π΄ΠΎΠ»Π³Π° ΠΈ ΠΊΠ°ΠΏΠΈΡΠ°Π»Π°, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎΡΡ Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»Π³Π°. ΠΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²Π°ΠΆΠ½ΡΠΌ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π² ΡΡΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ΅Π½ΠΈΡΡ ΡΡΠΌΠΌΡ Π΄Π΅Π½Π΅ΠΆΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»Π³Π°.ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π½Ρ ΠΊ ΠΏΡΠΈΠ±ΡΠ»ΠΈ (P / E), Π²Π°ΠΆΠ½ΡΠΉ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅, Π½Π΅ ΡΠ°ΠΊ Π²Π°ΠΆΠ΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈΠ±ΡΠ»Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ-Π·Π°Π³Π»ΡΡΠ΅ΠΊ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅Π²ΡΡΠΎΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ Π·Π°Π³Π»ΡΡΠΊΠΈ: 3Com ΠΈ Palm
Π‘Π΅ΡΠ΅Π²Π°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ 3Com, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π»Π° ΡΡΠΏΠ΅ΡΠ½ΡΡ ΡΠ΅ΡΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ² Palm Pilot Π² 1990-Ρ
Π³ΠΎΠ΄Π°Ρ
, Π²ΡΠ΄Π΅Π»ΠΈΠ»Π° 7% ΡΠ²ΠΎΠ΅ΠΉ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Palm Π² 2000 Π³ΠΎΠ΄Ρ. 3Com Π²ΡΠ΅ Π΅ΡΠ΅ Π²Π»Π°Π΄Π΅Π»Π° 95% Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»Π° 200 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π΄ΠΎΠ»Π»Π°ΡΠΎΠ² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
Π΄ΠΈΠ²ΠΈΠ΄Π΅Π½Π΄ΠΎΠ² ΠΈ Π½Π°Π»ΠΎΠ³ΠΎΠ²ΡΡ
Π»ΡΠ³ΠΎΡ ΠΎΡ ΡΠΏΠΈΠ½-ΠΎΡΡ.
Π 2000 Π³ΠΎΠ΄Ρ Palm ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ»Π° ΠΏΡΠ±Π»ΠΈΠΊΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΠΊΡΠΈΠΉ. ΠΠ½Π²Π΅ΡΡΠΎΡΡ, Π½Π΅ ΡΡΠΌΠ΅Π²ΡΠΈΠ΅ ΠΏΡΠΈΠ½ΡΡΡ ΡΡΠ°ΡΡΠΈΠ΅ Π² ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π°ΠΊΡΠΈΠΉ, ΡΠ²Π΅Π»ΠΈΡΠΈΠ»ΠΈ Π΅Π΅ ΡΡΠΎΠΈΠΌΠΎΡΡΡ Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΡΠ΅Π² Ρ 5 Π΄ΠΎ 22 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄ΠΎΠ² Π΄ΠΎΠ»Π»Π°ΡΠΎΠ². Palm ΠΏΠΎΠ΄Π½ΡΠ»Π°ΡΡ Π΅ΡΠ΅ Π²ΡΡΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΌΠ°Π½ΠΈΠΈ Π΄ΠΎΡΠΊΠΎΠΌΠΎΠ² Π²ΠΎΠΊΡΡΠ³ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ². ΠΠ³ΠΎ ΡΠ΅Π½Π° Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΡΡΠ°Π²ΠΈΠ»Π° 95 Π΄ΠΎΠ»Π»Π°ΡΠΎΠ² Π² ΠΊΠΎΠ½ΡΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π΄Π½Ρ ΡΠΎΡΠ³ΠΎΠ², Π° ΡΡΠ½ΠΎΡΠ½Π°Ρ ΠΊΠ°ΠΏΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ — 54 ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π° Π΄ΠΎΠ»Π»Π°ΡΠΎΠ², ΡΡΠΎ Π²ΡΡΠ΅, ΡΠ΅ΠΌ Ρ Π΅Π³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠΡΠΎ Π±ΡΠ»ΠΎ Π΄Π°ΠΆΠ΅ Π²ΡΡΠ΅, ΡΠ΅ΠΌ Ρ ΡΠ°ΠΊΠΈΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, ΠΊΠ°ΠΊ General Motors, Chevron ΠΈ McDonald’s.
Π‘ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΡΡ ΠΏΠΎΡΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ² ΠΈ ΡΠΌΠ°ΡΡΡΠΎΠ½ΠΎΠ² ΡΡΠ½ΠΎΠΊ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² Palm ΡΠΎΠΊΡΠ°ΡΠΈΠ»ΡΡ. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Π² 2010 Π³ΠΎΠ΄Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π±ΡΠ»Π° ΠΊΡΠΏΠ»Π΅Π½Π° Hewlett Packard, Π° Π²ΡΠΏΡΡΠΊ Π΅Π΅ ΡΠ»Π°Π³ΠΌΠ°Π½ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, Palm Pilot, Π±ΡΠ» ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ Π² 2011 Π³ΠΎΠ΄Ρ.
Π‘Π°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ Π² ΠΌΠΈΡΠ΅: Vocabulary.com
ΡΡΡΠΈΡΡ Π΄ΡΠΎΠ±Π»Π΅Π½ΠΈΠ΅ΠΌ
Π³Π»ΡΠΏΡΠ΅ Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΠ°
Π²ΡΠΉΡΠΈ Π½Π° ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΉΡΠΈ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠΎΠΌΠ½Π°ΡΡ ΠΈΠ»ΠΈ Π·Π΄Π°Π½ΠΈΡ
ΡΠΏΡΡΠΌΡΠΉ, ΡΠΏΠΎΡΠ½ΠΎ Π½Π΅ ΠΆΠ΅Π»Π°ΡΡΠΈΠΉ ΡΡΡΡΠΏΠ°ΡΡ
ΠΎΠ³ΡΠΎΠΌΠ½ΡΠ΅, Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ, ΡΠΈΠ»Π΅ ΠΈΠ»ΠΈ ΡΠ°Π·ΠΌΠ°Ρ Ρ, ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ΅ΠΏΠ΅Ρ
ΠΏΡΠΈΡΡΡΠΏΠΈΠ» ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ
ΡΡΠΎΠΏΠΎΡ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠΎΠΏΠΎΡ (Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅)
ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ²Π΅ΡΠ΄ΠΎΡΡΠΈ ΠΈ ΡΡΠΎΠΉΠΊΠΎΡΡΠΈ
ΡΠ΅ΡΠΈΠ½Π° Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌ ΡΠΎΡΡΠΎΠΌ Π±ΠΎΡΠΎΠ΄Ρ
ΠΎΡΠ΅Π»ΠΎΠΌΠ»Π΅Π½Π½ΡΠΉ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΠ½Π΅ΠΌΠ΅Π» ΠΎΡ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡ
Π³Π»ΡΠΏΠΎΡΡΡ ΠΏΠ»ΠΎΡ Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π²ΡΠ³ΠΎΠ΄Ρ ΠΈΠ· ΠΎΠΏΡΡΠ°
Π² ΡΠΆΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π²ΠΈΠΆΠ΅ΡΡΡ Π½Π° ΡΠ³
ΡΡΠΈΠΏΠ΅Π½Π΄ΠΈΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ Π΄Π΅Π½Π΅ΠΆΠ½Π°Ρ ΡΡΠΌΠΌΠ°
Π‘Π²Π΅ΡΠΎΡΠΎΡ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ° Π½Π° ΠΏΠ΅ΡΠ΅ΠΊΡΠ΅ΡΡΠΊΠ°Ρ
ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΡΠΌΠΎ Π·Π°ΡΠ²ΠΈΡΡ Π² Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΡΠΎΠ»ΡΡΡΠΉ, ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΠΉ ΠΏΠΎΠ²ΡΡΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠ»ΠΎΠΉ
ΡΡΡΠΏΠ΅Π½ΡΠΊΠ° ΠΏΠΎ Π½Π΅ΠΉ Π±ΡΡΡΡΠΎ Π΄Π²ΠΈΠ³Π°ΠΉΡΡ
ΡΡΠΈΠ±Π½ΠΈΡ ΠΌΡΠ³ΠΊΠΈΠΉ ΡΠ΅ΡΡΠΉ ΠΌΠΈΠ½Π΅ΡΠ°Π»; Π³Π»Π°Π²Π½Π°Ρ ΡΡΠ΄Π° ΡΡΡΡΠΌΡ
ΡΠ³ ΠΊ Π·Π°ΠΏΠ°Π΄Ρ ΡΠΎΡΠΊΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΊ Π·Π°ΠΏΠ°Π΄Ρ ΠΎΡ ΡΠ³Π°
ΡΠ³ Π½Π° Π²ΠΎΡΡΠΎΠΊ ΡΠΎΡΠΊΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΊ Π²ΠΎΡΡΠΎΠΊΡ ΠΎΡ ΡΠ³Π°
Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ°ΠΊΠ΅ΡΠΎΠΌ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΎΠΉ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Swift?
(Π‘Π΅Π²Π΅ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅ΡΠΌΠ΅ΡΠ½ΠΈΠΊ.ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π΄ΠΎΡΡΠΎΡΠ½ΠΈΠ΅.)
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π»ΡΠ΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Ρ Β«ΠΈΠΌΠΈΡΠ°ΡΠΈΡΒ» ΠΈ Β«Π·Π°Π³Π»ΡΡΠΊΠ°Β» ΠΊΠ°ΠΊ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΡ, ΠΈ Π²ΠΎΠΊΡΡΠ³ Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠ°Π½ΠΈΡΡ. ΠΠΎ ΠΌΠΎΠΊΠΈ — ΡΡΠΎ Π½Π΅ Π·Π°Π³Π»ΡΡΠΊΠΈ, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΠ°ΡΡΠΈΠ½ Π€Π°ΡΠ»Π΅Ρ, ΠΎΠ½ΠΈ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π°ΡΠ΅.
Π’Π°ΠΊ Π² ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ°ΠΊΠ΅ΡΠΎΠΌ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΎΠΉ, ΠΈ ΠΊΠ°ΠΊ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π°?
ΠΠ°Π³Π»ΡΡΠΊΠ° Π² Swift
ΠΠ°Π³Π»ΡΡΠΊΠ° ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎΡ ΠΈ Π²ΡΠ΅. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ BlogClient , ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Blog (ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ, Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ), Π΅Π³ΠΎ Π·Π°Π³Π»ΡΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
class BlogClientStub: BlogClient {
ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ func fetch () -> Blog {
Π²Π΅ΡΠ½ΡΡΡΡΡ Π² Π±Π»ΠΎΠ³ (Π½Π°Π·Π²Π°Π½ΠΈΠ΅: Β«ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ RoadfireΒ»)
}
}
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΌΠ΅ΡΠΎΠ΄ fetch Π² Π½Π°ΡΠ΅ΠΉ Π·Π°Π³Π»ΡΡΠΊΠ΅ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠΉ Π±Π»ΠΎΠ³ — ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ BlogViewModel , ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ BlogClient Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Blog , ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠ»ΠΈ Π²ΡΠ±ΠΎΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΉ ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ, Π²Π°ΠΌ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΡΠ²ΠΎΠΈΡ
ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ
ΡΠ΅ΡΡΠ°Ρ
. Π’Π°ΠΊ ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΊΠΎΠΉ Π·Π°Π³Π»ΡΡΠΊΠΈ:
func test_title_with_stub () {
let stub = BlogClientStub ()
ΠΏΡΡΡΡ viewModel = BlogViewModel (ΠΊΠ»ΠΈΠ΅Π½Ρ: Π·Π°Π³Π»ΡΡΠΊΠ°)
ΠΏΡΡΡΡ title = viewModel.title ()
XCTAssertEqual (Β«ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ RoadfireΒ», Π½Π°Π·Π²Π°Π½ΠΈΠ΅)
}
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π°ΡΠ΅Π³ΠΎ BlogClientStub ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π°ΡΠ΅ΠΌΡ BlogClientViewModel .ΠΠΎΠ³Π΄Π° ΠΌΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ Ρ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Blog Π² Π·Π°Π³Π»ΡΡΠΊΠ΅ — Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Β«Roadfire SoftwareΒ».
ΠΏΡΠΎΡΡΡ ΠΈ ΠΏΠΎΠ½ΡΡΠ½Ρ — ΠΏΠΎ ΡΡΡΠΈ, ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΎΡΡΠ΅ΠΉΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
Mocking Π² Swift
ΠΠΎΠΊΠΈ, Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅. ΠΠ½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ°ΠΊΠ΅Ρ Π½Π° Swift Π²ΠΎΡ ΡΠ°ΠΊ:
class BlogClientMock: BlogClient {
var fetchWasCalled = false
ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ func fetch () -> Blog {
fetchWasCalled = true
return Blog (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ: Β«ΠΡΡΠ³ΠΎΠΉ Π±Π»ΠΎΠ³ iOSΒ»)
}
}
ΠΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΡΠΈΡ , ΠΊΠ°ΠΊ Π½Π°ΡΠ° Π·Π°Π³Π»ΡΡΠΊΠ°, Π½ΠΎ Ρ Π½Π΅Π΅ Π΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ.ΠΠ½ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ, Π±ΡΠ» Π»ΠΈ Π²ΡΠ·Π²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ fetch ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ fetchWasCalled . ΠΠ½ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ false , ΡΠΊΠ°Π·ΡΠ²Π°Ρ, ΡΡΠΎ fetch Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π° true , ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ fetch .
ΠΠ°ΠΊ Π±Ρ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠΎ Π² ΡΠ΅ΡΡΠ΅? ΠΠ°ΠΊ ΡΡΠΎ:
func test_title_with_mock () {
let mock = BlogClientMock ()
ΠΏΡΡΡΡ viewModel = BlogViewModel (ΠΊΠ»ΠΈΠ΅Π½Ρ: ΠΌΠ°ΠΊΠ΅Ρ)
ΠΏΡΡΡΡ _ = viewModel.
Π·Π°Π³Π»Π°Π²ΠΈΠ΅()
XCTAssertTrue (mock.fetchWasCalled)
}
Π ΡΡΠΎΠΌ ΡΠ΅ΡΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠ°ΠΊΠ΅ΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ Π² BlogViewModel . ΠΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ title Π² Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, ΡΡΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ·ΠΎΠ²Π΅Ρ fetch Π½Π° Π½Π°ΡΠ΅ΠΌ BlogClientMock . ΠΡΠΎ Π΄Π°Π΅Ρ Π½Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΠΈ Π² Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ — ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Ρ
ΠΎΡΠ΅Π»ΠΈ Π±ΡΡΡ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ title , ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ΅ΡΡΠ΅-Π·Π°Π³Π»ΡΡΠΊΠ΅.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΉΡΠΈ Π΅ΡΠ΅ Π΄Π°Π»ΡΡΠ΅ — Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ , Π½ΠΎ ΠΈ ΡΡΠΎ ΠΎΠ½ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² . ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, fetchCallCount ), ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ fetch Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·.
Π‘ΡΠΎΠΈΡ Π·Π°Π³Π»ΡΡΠΈΡΡ ΠΈΠ»ΠΈ ΠΈΠ·Π΄Π΅Π²Π°ΡΡΡΡ?
ΠΡΠΎ ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡ Π½Π°Ρ ΠΊ Π²ΠΎΠΏΡΠΎΡΡ: ΡΠ»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ Π·Π°Π³Π»ΡΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·Π΄Π΅Π²Π°ΡΡΡΡ Π½Π°Π΄ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π² Swift?
ΠΠΎΠΎΠ±ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΡΡΠ°Π±. ΠΠ½Π΅ ΠΌΠΎΠΊΠΈ ΠΊΠ°ΠΆΡΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΡΡΠΏΠΊΠΈΠΌΠΈ — ΠΎΠ½ΠΈ Π·Π½Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° , ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠ΅ΡΡΠΈΡΡΡ. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΎΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ Ρ ΠΌΠΎΠ³Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ.
ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ², Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ
ΠΎΡΠΈΡΠ΅ Π½Π°ΡΠΌΠ΅Ρ
Π°ΡΡΡΡ ΠΈΠ»ΠΈ Π·Π°Π³Π»ΡΡΠ°ΡΡ — ΠΈΠ½ΠΎΠ³Π΄Π° Ρ Π½Π°Ρ
ΠΎΠΆΡ ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ.ΠΠΎΠ΄Π΄Π΅Π»ΠΊΠ° — ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
Π² ΠΏΠ°ΠΌΡΡΠΈ. Π Π°Π½ΡΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ UserDefaults — Π΅Π΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ ΠΈΠΌΠΈΡΠ°ΡΠΎΡΡ ΠΈΠ»ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ.
ΠΠ°ΠΊ Π½Π°ΡΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ?
ΠΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ iOS ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΌ — ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² iOS ΡΡΠΈΠΌ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ. ΠΠΎΠ»ΠΆΠ½Ρ Π»ΠΈ Π²Ρ, , ΠΏΠΈΡΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ? Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠ°ΠΊΠΎΠ²Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ? Π Π΅ΡΠ»ΠΈ ΡΡΠΎΠΈΡ Π·Π°ΡΡΠ°ΡΠ΅Π½Π½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ, ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ? ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ²ΠΎΠ΅ ΠΈΠΌΡ ΠΈ Π°Π΄ΡΠ΅Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ Π² ΠΏΠΎΠ»Ρ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅ΡΡ Π½Π° ΡΠ²ΠΎΠΈ Π²ΠΎΠΏΡΠΎΡΡ.
Π£ΡΠΏΠ΅Ρ ! Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ²ΠΎΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ ΠΏΠΎΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ.
Π·Π°Π³Π»ΡΡΠΊΠ° | ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Cypress
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠΉΡΠ΅ Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
cy.stub ()
cy.stub (ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΌΠ΅ΡΠΎΠ΄)
cy.stub (ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΌΠ΅ΡΠΎΠ΄, replacerFn)
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
cy.stub (ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, addFriend)
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡ (ΠΎΠ±ΡΠ΅ΠΊΡ)
ΠΠ±ΡΠ΅ΠΊΡ , Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ , ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ.
ΠΌΠ΅ΡΠΎΠ΄ (ΡΡΡΠΎΠΊΠ°)
ΠΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° , ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠ½ΡΡΡ.
replacerFn (Π€ΡΠ½ΠΊΡΠΈΡ)
Π€ΡΠ½ΠΊΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π΄Π»Ρ Π·Π°ΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ .
Π£ΡΠΎΠΆΠ°ΠΉΠ½ΠΎΡΡΡ
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄ Cypress, cy.stub () ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΌ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
(Π·Π°Π³Π»ΡΡΠΊΠ°) Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΠΏΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΏΠΎΡ
ΠΎΠΆΠ΅Π³ΠΎ Π½Π° ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅.
cy.stub () Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π°Π³Π»ΡΡΠΊΡ Sinon.js. ΠΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π°ΠΉΠ΄Π΅Π½Ρ Π½Π°
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠΏΠΈΠΎΠ½Ρ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ Sinon.js.
ΠΡΠΈΠΌΠ΅ΡΡ
ΠΠ΅ΡΠΎΠ΄
Π‘ΠΎΠ·Π΄Π°ΡΡ Π·Π°Π³Π»ΡΡΠΊΡ ΠΈ Π²ΡΡΡΠ½ΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ
util.addListeners = cy.stub ()
App.start ()
ΠΎΠΆΠΈΠ΄Π°ΡΡ (util.addListeners) .to.be.called
ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π·Π°Π³Π»ΡΡΠΊΠΎΠΉ
cy.stub (ΡΡΠΈΠ»ΠΈΡΠ°, 'addListeners')
App.start ()
ΠΎΠΆΠΈΠ΄Π°ΡΡ (util.addListeners) .to.be.called
ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ
ΠΏΡΡΡΡ listenersAdded = false
cy.Π·Π°Π³Π»ΡΡΠΊΠ° (util, 'addListeners', () => {
listenersAdded = true
})
App.start ()
ΠΎΠΆΠΈΠ΄Π°ΡΡ (listenersAdded) .to.be.true
Π£ΠΊΠ°ΠΆΠΈΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π³Π»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°
const removeStub = cy.stub ()
cy.stub (util, 'addListeners'). Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ (removeStub)
App.start ()
App.stop ()
ΠΎΠΆΠΈΠ΄Π°ΡΡ (removeStub) .to.be.called
ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠΊΠ½Π°, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅
cy.visit ('http: // localhost: 3000', {
onBeforeLoad (win) {
cy.stub (ΠΏΠΎΠ±Π΅Π΄Π°, "ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°").Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ('ΠΌΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅')
},
})
App.start ()
cy.window (). its ('ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅'). should ('be.called')
cy.get ('. name'). should ('have.value', 'ΠΌΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅')
ΠΡΠΊΠ»ΡΡΠΈΡΡ Π·Π°ΠΏΠΈΡΡ Π² ΠΆΡΡΠ½Π°Π» ΠΊΠΎΠΌΠ°Π½Π΄
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΡΠ·Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ .log (bool) , ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ Π²ΡΠ·ΠΎΠ²Π°ΠΌ cy.stub () Π±ΡΡΡ
ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΡΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ
ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·.
const obj = {
foo () {},
}
const stub = cy.stub (obj, 'foo').ΠΆΡΡΠ½Π°Π» (Π»ΠΎΠΆΡ)
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅
cy.stub () ΠΏΡΠΈΠΌΠ΅ΡΡΠΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ .as () ΠΊ Π·Π°Π³Π»ΡΡΠΊΠ°ΠΌ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΈΡ
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ
ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
ΠΈ ΠΆΡΡΠ½Π°Π»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ Cypress.
const obj = {
foo () {},
}
const stub = cy.stub (obj, 'foo'). as ('anyArgs')
const withFoo = stub.withArgs ('foo'). as ('withFoo')
obj.foo ()
ΠΎΠΆΠΈΠ΄Π°ΡΡ (Π·Π°Π³Π»ΡΡΠΊΠ°) .to.be.called
ΠΎΠΆΠΈΠ΄Π°ΡΡ (withFoo) .to.be.called
Π ΠΆΡΡΠ½Π°Π»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
ΠΠ°Π½ΠΊΠ½ΠΎΡΡ
ΠΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ±ΡΠΎΡ / Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΡΠ°ΠΌΠΈ
cy.stub () ΡΠΎΠ·Π΄Π°Π΅Ρ Π·Π°Π³Π»ΡΡΠΊΠΈ Π²
ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π·Π°Π³Π»ΡΡΠΊΠΈ
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ / Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΡΠ°ΠΌΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ²Π½ΠΎ
ΡΠ±ΡΠΎΡΠΈΡΡ / Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ
.
ΠΡΠ»ΠΈΡΠΈΡ
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ cy.spy () ΠΈ cy.stub ()
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ cy.spy () ΠΈ cy.stub () Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²
ΡΡΠΎ cy.spy () Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄, Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±Π΅ΡΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ. Π’Π°ΠΊ ΡΡΠΎ ΠΏΠΎΠΊΠ°
Π²ΡΠ·ΠΎΠ²Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ, ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ
ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ
Π±ΡΠ°ΡΠ·Π΅ΡΠ°.ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄
Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²Π°ΡΠΈΠΌ ΡΠ΅ΡΡΠΎΠΌ, Π½ΠΎ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΡΠ°Π²ΠΈΠ»Π°
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
-
cy.stub ()ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΏΡΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΡΠ΅ΠΏΡΡcy.
Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ
-
cy.stub ()Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ.
Π’Π°ΠΉΠΌΠ°ΡΡΡ
-
cy.stub ()Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΡΠ΅ΡΡ.
ΠΡΡΠ½Π°Π» ΠΊΠΎΠΌΠ°Π½Π΄
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π·Π°Π³Π»ΡΡΠΊΡ, ΠΏΡΠΈΡΠ²ΠΎΠΉΡΠ΅ Π΅ΠΉ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π΅
const obj = {
foo () {},
}
const stub = cy.Π·Π°Π³Π»ΡΡΠΊΠ° (obj, 'foo'). as ('foo')
obj.foo ('ΡΡ', 'Π±Π°Ρ')
ΠΎΠΆΠΈΠ΄Π°ΡΡ (Π·Π°Π³Π»ΡΡΠΊΠ°) .to.be.called
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²ΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠ°ΠΊ:
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅ (stub-1) Π² ΠΆΡΡΠ½Π°Π»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠ½ΡΠΎΠ»Ρ
Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
ΠΡΡΠΎΡΠΈΡ
| ΠΠ΅ΡΡΠΈΡ | ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ |
|---|---|
| 0.20.0 | ΠΠΎΠ±Π°Π²Π»Π΅Π½ .log (bool) method |
| 0.18,8 | cy.stub () Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ββΠΊΠΎΠΌΠ°Π½Π΄Π° |


notify`
# ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠΎΠ³ΠΎ `it do...end` Π±Π»ΠΎΠΊΠ°
# ΠΏΡΠΎΠ²Π΅ΡΠΈΡ, Π±ΡΠ» Π»ΠΈ ΠΎΠ½ Π²ΡΠ·Π²Π°Π½.
# ΠΡΠ»ΠΈ Π²ΡΠ·ΠΎΠ²Π° Π½Π΅ Π±ΡΠ»ΠΎ β ΠΎΡΠΈΠ±ΠΊΠ° ΠΈ ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ΅ΡΡ.
#
# ΠΠΎΠ³Π΄Π° Π½Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΏΡΠΎΡΡΡ, ΡΠ΅ΠΌ
# ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΌΠΎΠΊ ΠΎΡ ΡΡΠ°Π±Π°, ΠΎΡΠ²Π΅ΡΠ°ΠΉΡΠ΅:
# Β«Π’ΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π°Π»ΠΈΡΡ ΡΠ΅ΡΡΒ».
clone_poor_dolly
end
end
assertEqual (read_and_trim ("/ fake / file / path"), "ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°")
mock_object.assert_called_with ("/ ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΡΠΉ / ΡΠ°ΠΉΠ» / ΠΏΡΡΡ")
ΠΌΠΊΡ ')
self.assertEqual (parsed_content ['Π½Π°Π·Π²Π°Π½ΠΈΡ'], ['ΠΡΠΈΠΌΠ΅Ρ Hello World'])
Π‘ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ Π²Ρ Π±Π΅ΡΡΠΈΠ»ΡΠ½Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΎΡΠΈΠ±Π°ΡΡΡΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ. ΠΠΎΠΊΠΈΠ½Π³ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²Ρ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅ΡΡΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, ΠΈ Π½Π΅ Π΄Π°Π΅ΡΠ΅ ΡΠ΅Π±Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ.
Π·Π°Π³Π»Π°Π²ΠΈΠ΅()
XCTAssertTrue (mock.fetchWasCalled)
}