Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ ΠΈ стаб ?

<Β Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„Π°Π·Π·ΠΈΠ½Π³?

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

sb. ‘s reputation

ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚ΡŒ Ρ‡ΡŒΠ΅ΠΉ-Π». Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΠΈ

Englishto stab sb.’s reputation

ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚ΡŒ Ρ‡ΡŒΠ΅ΠΉ-Π». Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΠΈ

Englishto stab in the back

Π²ΡΠ°Π΄ΠΈΡ‚ΡŒ Π½ΠΎΠΆ Π² спину

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, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ архивируСтся Π½Π΅ просто Ρ‚Π°ΠΊ, Π° с ΠΏΠ°Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ. ПослС выполнСния Π΄Π°Π½Π½Ρ‹Ρ… дСйствий Π½ΠΈ ΠΎΠ΄Π½Π° антивирусная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ смоТСт Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ трояна, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΊ Π°Ρ€Ρ…ΠΈΠ²Π°ΠΌ ΠΎΠ½ΠΈ Π½Π΅ ΡƒΠΌΠ΅ΡŽΡ‚.
Π—Π΄Π΅ΡΡŒ присутствуСт ΠΎΠ΄ΠΈΠ½ нСбольшой ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹ΠΉ камСнь. Антивирусы Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π² свои Π±Π°Π·Ρ‹ сигнатур ΠΊΠΎΠ΄Ρ‹ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ-ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ΠΎΠ², Π½ΠΎ Ссли Π’Ρ‹ создали ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая совсСм Π½Π΅ являСтся вирусом, Π° выполняСт ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ дСйствия, Π½ΠΎ ΠΏΡ€ΠΈ этом Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Π»ΠΈ Π΅Π΅ для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ популярным ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ΠΎΠΌ, Ρ‚ΠΎ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ антивирус ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π½Π°Ρ‡Π½Π΅Ρ‚ Ρ€ΡƒΠ³Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ содСрТится ΡΡ‚Ρ€Π°ΡˆΠ½Ρ‹ΠΉ вирус. Ну, ΠΎΡ‚ этого Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ Π΄Π΅Ρ‚ΡŒΡΡ, Ссли Π’Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ общСдоступными ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€Π°ΠΌΠΈ.
Π’ΠΎΠΎΠ±Ρ‰Π΅, ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ доступности ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π½Π° ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ (Public) ΠΈ ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ (Private).
ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ΠΎΠ² являСтся общСдоступным, ΠΎΠ½ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСны Π½Π° просторах Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ТСлания ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ любой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ. Основной ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стороной Ρ‚Π°ΠΊΠΈΡ… ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ΠΎΠ² являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ истСчСнии совсСм нСбольшого срока ΠΎΠ½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠ°Π»ΠΈΡ‚ΡŒΡΡ практичСски всСми антивирусами (вСдь антивирусныС Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π΄Ρ€Π΅ΠΌΠ»ΡŽΡ‚ ΠΈ ΡΡ‚Π°Ρ€Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ свСТиС Π²ΠΈΠ΄Ρ‹ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ΠΎΠ², Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΊΠ°ΠΊ ΠΈΡ… Π½Π΅ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ, Ссли ΠΎΠ½ΠΈ Π»Π΅ΠΆΠ°Ρ‚ Π² свободном доступС).
Π‘ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΆΠ΅ Π²ΠΈΠ΄ΠΎΠΌ всС Π½Π΅ Ρ‚Π°ΠΊ просто. Π­Ρ‚ΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€Ρ‹ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ сообщСству людСй Π»ΠΈΠ±ΠΎ ΠΆΠ΅ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ приобрСсти Π·Π° Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ дСньги (элСктронныС Π² основном). Π”Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ΠΎΠ² являСтся Π±ΠΎΠ»Π΅Π΅ устойчивым ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΈΡ… антивирусами благодаря ΠΊΠ°ΠΊ постоянно ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, Ρ‚Π°ΠΊ ΠΈ постоянно обновляСмому стабу. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стаб, спроситС Π’Ρ‹? ΠžΡ‚Π²Π΅Ρ‚ΠΈΠΌ. Π‘Ρ‚Π°Π± – Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€Π°, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… врСдоносной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая ΠΈ Π±Ρ‹Π»Π° Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ΠΎΠΌ.

Часто Π² Ρ€Π°Π΄Π΅Π»Π°Ρ… Ρ„ΠΎΡ€ΡƒΠΌΠΎΠ², Π³Π΄Π΅ прСдставлСны ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€Ρ‹, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ FUD ΠΈ semiFUD. Π Π°ΡΡˆΠΈΡ„Ρ€ΡƒΠ΅ΠΌ эти Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π’Π°ΠΌ Π±Ρ‹Π»ΠΎ Π±ΠΎΠ»Π΅Π΅ понятно. Π§Ρ‚ΠΎ ΠΆΠ΅ это Ρ‚Π°ΠΊΠΎΠ΅.
1)FUD β€” Full Undetected β€” Β«ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ опрСдСляСтся антивирусами»
2)semiFUD β€” Semi-full undetected β€” Β«ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ опрСдСляСтся антивирусами».
Помимо ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ΠΎΠ², ΠΏΡ€ΠΈ написании врСдоносного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния (вирусов ΠΈ троянских ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅ пСрСчислим ΠΈΡ… названия ΠΈ расскаТСм, для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ слуТат.
Для ΠΊΡ€Π°ΠΆΠΈ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ICQ, Π»ΠΎΠ³ΠΈΠ½ΠΎΠ² ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ ΠΊ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°ΠΌ элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΈ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ сСтям ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ особыС тоянскиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΈΠ½Ρ‡ΠΈ ΠΈ ксинчи.
Для ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Π²ΠΎΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ php-скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π³Π΅ΠΉΡ‚Π°ΠΌΠΈ.
Для соСдинСния Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» бСзопасной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ вируса слуТат Π΄ΠΆΠΎΠΉΠ½Π΅Ρ€Ρ‹. ΠŸΡ€ΠΈ этом Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ (допустим, Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ), Ρ‚Π°ΠΊ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, троянского вируса), остаСтся Π½Π° Π²Ρ‹ΡΡˆΠ΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.
Π’ΠΎΡ‚ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΈ вся основная тСорСтичСская информация ΠΏΠΎ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π’Π°ΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ.

По Ρ…Π°Ρ€Π΄ΠΊΠΎΡ€Ρƒ: Π΄ΡƒΠ±Π»Π΅Ρ€Ρ‹, ΠΌΠΎΠΊΠΈ, стабы

БСгодня ΠΎ тСстах. ΠŸΠΎΡΡ‚ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π·Π½Π°ΠΊΠΎΠΌ с 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, которая взаимодСйствуСт с систСмным Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ для фактичСского поиска Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ.Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Π³Π΄Π΅ ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС тСст для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  1. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ тСст, сущСствуСт; ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½Π΅Ρ‚, тСст Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚.
  2. ВСст Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π²Π΅Ρ‚Π° систСмного Π²Ρ‹Π·ΠΎΠ²Π°; Ссли систСмный Π²Ρ‹Π·ΠΎΠ² истСчСт, тСст Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½.

Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· случаСв ΠΎΡ‚ΠΊΠ°Π·Π° Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ваша рСализация Π½Π΅ смогла Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π­Ρ‚ΠΈ тСсты Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ зависят ΠΎΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Π° систСмного Π²Ρ‹Π·ΠΎΠ²Π°), Π½ΠΈ эффСктивными (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ соСдинСниС с систСмным Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для доставки запроса ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°).

ВСстовый ΠΊΠΎΠ΄ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ выглядит Ρ‚Π°ΠΊ:

  @ 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, ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅.

ИдСю ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ для тСстирования Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… слуТб. ΠŸΡ€ΠΈ тСстировании ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠ³ΠΎ прилоТСния с использованиСм микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ установка всСй систСмы ΠΈ инфраструктуры ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ дорогостоящСй. Π’Π°ΠΊΠΈΠ΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΎΡ‚ использования ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠ³ΠΎ тСстирования. Π’ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Π΅ тСстирования ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠ΅ тСстированиС находится ΠΌΠ΅ΠΆΠ΄Ρƒ уровнями тСстирования ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ / ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ тСстирования, Π² зависимости ΠΎΡ‚ покрытия ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠ³ΠΎ тСстирования Π² вашСй систСмС.НСкоторыС ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠ΅ тСстированиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сквозноС ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС.

ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠ΅ тСстированиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ:

  1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° согласованного ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° прСдставим сСбС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для составлСния ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΎΠ² ΠΏΠΎΠ³ΠΎΠ΄Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ мСтСослуТба взаимодСйствуСт с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ слуТбой. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ слуТба ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ слуТбы ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ с Π΄Π°Ρ‚ΠΎΠΉ (запросом), ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ слуТба ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π΄Π°Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ³ΠΎΠ΄Ρƒ Π½Π° эту Π΄Π°Ρ‚Ρƒ.Π£ этих Π΄Π²ΡƒΡ… слуТб Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚: слуТба ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° всСгда Π±Ρ‹Π»Π° доступна для слуТбы ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΈ прСдоставляла Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ слуТба ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΈ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ ΠΈ Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ Π² тСстировании ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ слуТба выполняла фактичСский запрос слуТбы ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ Π² тСстС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΡŽ ΠΎΡ‚Π²Π΅Ρ‚Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя слуТбами сущСствуСт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, конСчная Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.Π­Ρ‚ΠΎ освободит ΠΎΠ±Π΅ слуТбы ΠΎΡ‚ зависимости Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π²ΠΎ врСмя тСстов, Ρ‡Ρ‚ΠΎ сдСлаСт тСсты Π±ΠΎΠ»Π΅Π΅ быстрыми ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌΠΈ.

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ постС ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ запускС Ρ€Π°Π·Π½Ρ‹Ρ… тСстов Π² Ρ€Π°Π·Π½Ρ‹Ρ… срСдах ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ тСст Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ срСдС с Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ. ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½Ρ‹Π΅ тСсты — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ярких ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² послСднСго случая. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½Ρ‹Ρ… тСстов Π² Ρ€Π°Π·Π½Ρ‹Ρ… срСдах с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ конфигурациями.Когда это срСда Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня, такая ΠΊΠ°ΠΊ Dev ΠΈΠ»ΠΈ CI, запуск тСста с Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΈ тСстирования нашСй Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ срСды. Однако, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² срСду Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Ρ‚Π°ΠΊΡƒΡŽ ​​как QA ΠΈΠ»ΠΈ Staging, Ρ‚ΠΎΡ‚ ΠΆΠ΅ тСст ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, Π½ΠΎ с фактичСским ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ внСшнСй зависимости. Mbtest — это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ с тСстированиСм ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΠ·Π΄Π΅Π²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Π²Ρ‹ΡˆΠ΅.

ΠœΡ‹ рассмотрСли ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ тСстирования с использованиСм ΠΈΠΌΠΈΡ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π·Π°Π³Π»ΡƒΡˆΠ΅ΠΊ.А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹:

  1. ВСсты с ΠΌΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΈ Π·Π°Π³Π»ΡƒΡˆΠΊΠ°ΠΌΠΈ проходят быстрСС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ внСшним слуТбам. НСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°.
  2. Π£ вас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ тСст, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ части, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ. Π‘ внСшними сСрвисами Π²Ρ‹ Π±Π΅ΡΡΠΈΠ»ΡŒΠ½Ρ‹, Ссли ΠΎΠ½ΠΈ ΠΎΡˆΠΈΠ±Π°ΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ тСст Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚. Мокинг Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚Π΅ объСм тСстов для Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, ΠΈ Π½Π΅ Π΄Π°Π΅Ρ‚Π΅ сСбС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.
  3. Мокинг Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² API ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ваш тСст Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ
  4. ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠ΅ тСстированиС позволяСт сСрвисным ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌΠΈ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, управляСмая тСстированиСм» ΠΈ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, управляСмая ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌΒ» ΠΌΡ‹ исслСдуСм ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, управляСмой тСстированиСм (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

  • Ρ‚ΡƒΡˆΠΈΡ‚ΡŒ Π΄Ρ€ΠΎΠ±Π»Π΅Π½ΠΈΠ΅ΠΌ

  • 04″>

    Π³Π»ΡƒΠΏΡ‹Π΅ с отсутствиСм ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°

  • Π²Ρ‹ΠΉΡ‚ΠΈ Π½Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ врСмя Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΈΠ»ΠΈ здания

  • упрямый, ΡƒΠΏΠΎΡ€Π½ΠΎ Π½Π΅ ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΉ ΡƒΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ

  • ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅, Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ большиС ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ, силС ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ°Ρ…Ρƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Ρ€Π΅ΠΏΠ΅Ρ‚

  • приступил ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с

  • стопор ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ стопор (Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ мСстС)

  • ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ качСство ΠΈΠ»ΠΈ свойство твСрдости ΠΈ стойкости

  • Ρ‰Π΅Ρ‚ΠΈΠ½Π° с ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ ростом Π±ΠΎΡ€ΠΎΠ΄Ρ‹

  • 49″>

    ΠΎΡˆΠ΅Π»ΠΎΠΌΠ»Π΅Π½Π½Ρ‹ΠΉ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½Π΅ΠΌΠ΅Π» ΠΎΡ‚ удивлСния ΠΈ удивлСния

  • Π³Π»ΡƒΠΏΠΎΡΡ‚ΡŒ плохая ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π²Ρ‹Π³ΠΎΠ΄Ρƒ ΠΈΠ· ΠΎΠΏΡ‹Ρ‚Π°

  • Π² юТном Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ двиТСтся Π½Π° юг

  • стипСндия рСгулярно выдСляСмая дСнСТная сумма

  • Π‘Π²Π΅Ρ‚ΠΎΡ„ΠΎΡ€ свСтовой сигнал для контроля двиТСния транспорта Π½Π° пСрСкрСстках

  • ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ прямо Π·Π°ΡΠ²ΠΈΡ‚ΡŒ Π² Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

  • толстый, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ физичСской силой

  • ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠ° ΠΏΠΎ Π½Π΅ΠΉ быстро двигайся

  • 46″>

    стибнит мягкий сСрый ΠΌΠΈΠ½Π΅Ρ€Π°Π»; главная Ρ€ΡƒΠ΄Π° ΡΡƒΡ€ΡŒΠΌΡ‹

  • юг ΠΊ Π·Π°ΠΏΠ°Π΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ° компаса, которая находится Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΊ Π·Π°ΠΏΠ°Π΄Ρƒ ΠΎΡ‚ юга

  • юг Π½Π° восток Ρ‚ΠΎΡ‡ΠΊΠ° компаса, которая находится Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΊ востоку ΠΎΡ‚ юга

  • Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ ΠΈ Π·Π°Π³Π»ΡƒΡˆΠΊΠΎΠΉ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² 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 () Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​команда

    Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅

    .
    Π Π°Π·Π½ΠΎΠ΅

    Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

    Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *