Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании

ΠœΠΎΠ΄ΡƒΠ»ΡŒ Mock: ΠΌΠ°ΠΊΠ΅Ρ‚Ρ‹-ΠΏΡƒΡΡ‚Ρ‹ΡˆΠΊΠΈ Π² тСстировании

Mock Π½Π° английском Π·Π½Π°Ρ‡ΠΈΡ‚ «имитация», Β«ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠ°Β». ΠœΠΎΠ΄ΡƒΠ»ΡŒ с Ρ‚Π°ΠΊΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ сильно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ тСсты ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ простой: Ссли Π½ΡƒΠΆΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚ΠΎ всё, Ρ‡Ρ‚ΠΎ Π½Π΅ относится ΠΊ Π½Π΅ΠΉ самой (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с диска ΠΈΠ»ΠΈ ΠΈΠ· сСти), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ-ΠΏΡƒΡΡ‚Ρ‹ΡˆΠΊΠ°ΠΌΠΈ. ΠŸΡ€ΠΈ этом тСстируСмыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для тСстов: Mock подмСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… модулях, Π΄Π°ΠΆΠ΅ Ссли ΠΊΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ тСсты.

Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ β€” ΡƒΠΆΠ΅ Π½Π΅ Π½Π°Π΄ΡƒΠ²Π½Ρ‹Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Π½Ρ‹Π΅ установки, Π° цСлая надувная зСмля, Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Ρ‚Π°Ρ‚ΡŒ испытуСмыС Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ самолёты.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании

На Π₯Π°Π±Ρ€Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ Mock ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… модулях, Ρ‡Ρ‚ΠΎ называСтся monkey patch, Π½Π°ΠΌ ΠΈΠ½ΠΎΠ³Π΄Π° Π² Ρ€Π°Π±ΠΎΡ‚Π΅ приходится. Но Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ€ΡƒΡ‡Π½Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, Mock ΡƒΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ слоТныС подстановки, ΠΏΠ°Ρ‡ΠΊΠ°ΠΌΠΈ ΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π·Π° собой, Π½Π΅ оставляя ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.

ΠŸΠ°ΠΊΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСньшС 1 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π° ΠΈ устанавливаСтся ΠΎΡ‡Π΅Π½ΡŒ просто:

$ pip install mock
ΠΈΠ»ΠΈ
$ easy_install mock

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

ПодмСна Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, наша функция считаСт Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ, Π½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ: Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ большиС вычислСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Π² тСстС. И Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ хочСтся ввСсти строку ΠΏΠΎΠΊΠΎΡ€ΠΎΡ‡Π΅ (Ρ‡Ρ‚ΠΎΠ±Ρ‹ число ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ Π² permutations, len(name), Π±Ρ‹Π»ΠΎ мСньшС), Π½ΠΎ это Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ. МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° Π΄Π²Π΅, вынСсти Π²Ρ‹Π·ΠΎΠ² permutations Π½Π°Ρ€ΡƒΠΆΡƒ, ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Ρ‘ Π²Ρ‹Π²ΠΎΠ΄, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

ВмСсто пСрСписывания ΠΊΠΎΠ΄Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Β«ΠΏΡ€ΠΎΠΏΠ°Ρ‚Ρ‡ΠΈΡ‚ΡŒΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ permutations Π½Π° врСмя Π²Ρ‹Π·ΠΎΠ²Π°, Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅: print Π²Ρ‹Π·Π²Π°Π½ вмСсто 42! / (42 β€” 10)! Ρ€Π°Π· всСго 3, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» пробСТался ΠΏΠΎ xrange(3), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ подставили.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· контСкста with функция itertools.permutations Π²Π΅Ρ€Π½ΡƒΠ»Π°ΡΡŒ Π² своё Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ состояниС.

ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ информация

Допустим, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Ρ‚ΠΎΠΉ Π»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, с Ρ‚Π΅ΠΌΠΈ Π»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊ Ρ‚Π΅ΠΌ Π»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ. Для Π½ΡƒΠΆΠ½ΠΎ просто Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² Π½Π΅Ρ‘ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Mock, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ всё, Ρ‡Ρ‚ΠΎ происходит.

ΠŸΠΎΡ…ΠΎΠΆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: ΠΊΠΎΠ³Π΄Π° шли аэродинамичСскиС испытания Π‘ΡƒΡ€Π°Π½Π°, вСсь ΠΊΠΎΡ€Π°Π±Π»ΡŒ Π½Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠ²Π°Π»ΠΈ Π² Ρ‚Ρ€ΡƒΠ±Π΅ (Ρ‚Π°ΠΊΠΈΡ… Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚) ΠΈ Π½Π΅ запускали Π² атмосфСру. Π’ Π²ΠΎΠ·Π΄ΡƒΡ…Π΅ Π»Π΅Ρ‚Π°Π» ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π‘Π’Π‘-002, Π° для ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ посадки использовался ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π’Ρƒ-154 Π² обвСсС, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅ΠΌ аэродинамику Π‘ΡƒΡ€Π°Π½Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании

Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Mock Π΅ΡΡ‚ΡŒ нСсколько Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Ρ…:

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ функция real() ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ permutations. Π§Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‰Ρ‘ Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² автоматичСских тСстах, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² assert_*:

БинтаксичСский сахар

Для ΡŽΠ½ΠΈΡ‚-тСстов Π² Π”ΠΆΠ°Π½Π³ΠΎ пригодится Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ patch Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€:

ΠœΠ°ΠΊΠ΅Ρ‚Ρ‹ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²Π°

Иногда Π² Π”ΠΆΠ°Π½Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· сохранСния ΠΈΡ… Π½Π° диск ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΌΡ‹ Π±Ρ‹ наслСдовали ΠΎΡ‚ класса File ΠΈ пСрСзаписали Π±Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ. Но Π² Mock ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ сразу ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²Π°:

Π’ΠΎΡ‚ сколько тСстового ΠΊΠΎΠ΄Π° Π±Ρ‹Π»ΠΎ сэкономлСно. ΠšΡΡ‚Π°Ρ‚ΠΈ, пСрСдавая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ оТидая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π°Ρ‚ΡŒ ΠΈΠΌ ΠΈΠΌΠ΅Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ:

Как ΠΆΠ΅ эти Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚?

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ экзСмпляр класса Mock, Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ β€” снова Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр. Атрибут ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π² Ρ‚ΠΎΠΌ числС ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. НаконСц, любой ΠΌΠ°ΠΊΠ΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ (скаТСм, вмСсто класса):

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ экзСмпляр, Π½ΠΎ Ссли Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ Ρ€Π°Π·, экзСмпляр Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌ ΠΆΠ΅ самым. Π’Π°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства, послС Ρ‡Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² тСстируСмый ΠΊΠΎΠ΄, ΠΈ ΠΎΠ½ΠΈ Ρ‚Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ считаны.

Если ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ²: ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

ПолСзно ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ класса, ΠΊΠ°ΠΊΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρƒ Π½Π΅Π³ΠΎ Ρ€ΠΎΠ΄Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠ»ΡƒΡ‡Π°Π»ΠΎΡΡŒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠΉ.

Как ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΌΠ°ΠΊΠ΅Ρ‚Π°

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ ΠΌΠ°ΠΊΠ΅Ρ‚Π°, Π½Π΅ вызывая ошибки AttributeError. Π£ этого удобства Π΅ΡΡ‚ΡŒ обратная сторона: Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ помСняСм API, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° функция, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ с нашим классом, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ? Код Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° тСст выполняСтся Π±Π΅Π· ошибок. Для этого ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ spec (Π»ΠΈΠ±ΠΎ классу Mock, Π»ΠΈΠ±ΠΎ patch), ΠΈ ΠΌΠ°ΠΊΠ΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ свойствам:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ссли ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ model ΠΈΠ»ΠΈ shoot Ρƒ Ρ‚Π°Π½Ρ‡ΠΈΠΊΠ°, Π½ΠΎ Π·Π°Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ tank_sugar, тСст Π½Π΅ выполнится.

Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΠ΅Ρ‚ ΡƒΠΌΠ½Π΅Π΅

Π₯ΠΎΡ€ΠΎΡˆΠΎ, допустим, Mock ΡƒΠΌΠ΅Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄. А ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТноС, Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (return_value)? Π•ΡΡ‚ΡŒ 2 ΠΏΡƒΡ‚ΠΈ:

ΠšΡΡ‚Π°Ρ‚ΠΈ, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² simple_function ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ сказано Π²Ρ‹ΡˆΠ΅, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ΄Π° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ mock_class ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ method_calls.

ПодмСна встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π‘Π°ΠΌ ΠΏΠΎ сСбС Mock Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ встроСнныС Π² язык Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (len, iter), Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΠ΅Ρ‚ с Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ Β«Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΌΠΈΒ» функциями. НапримСр, Π²ΠΎΡ‚ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ°ΠΊΠ΅Ρ‚ Ρ„Π°ΠΉΠ»Π°:

Для мноТСства ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… случаСв, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ стандартный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (список, Ρ„Π°ΠΉΠ», число), Π΅ΡΡ‚ΡŒ класс MagicMock с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Ρ… для тСстов.

Π“Π΄Π΅ Mock Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π‘Π°ΠΌ Π°Π²Ρ‚ΠΎΡ€ модуля, Майкл Π€ΡƒΡ€Π΄, Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΌΠ°ΠΊΠ΅Ρ‚Ρ‹, Π° Π³Π΄Π΅ Π½Π΅Ρ‚, простой: Ссли с ΠΌΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅, ΠΈΡ… Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π° Ссли с Π½ΠΈΠΌΠΈ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅, Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ.

Π‘Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ связку Π΄Π²ΡƒΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ старого, ΠΈ Π² связкС ΠΌΠ½ΠΎΠ³ΠΎ пСрСкрёстных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². НуТно Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ: Ссли ΠΌΡ‹ постСпСнно Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ модуля, ΠΏΠΎΡ€Π° ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ β€” ΠΊΠΎΠ΄ тСста Тёстко сввязан с ΠΊΠΎΠ΄ΠΎΠΌ модуля, ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠΎΠ΄Π΅ придётся ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ тСсты. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π½Π΅ стоит ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ-ΠΌΠ°ΠΊΠ΅Ρ‚ вмСсто старого.

По ΠΌΠΎΠ΅ΠΌΡƒ Π»ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ, Mock ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² PuDB ΡΠ»ΡƒΡ‡Π°Π»Π°ΡΡŒ бСсконСчная рСкурсия. IPDB Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, поэтому тСсты ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΡ‹ выполняли с IPDB, Π° просто ΠΊΠΎΠ΄ β€” Π½Π° PuDB.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

ΠœΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² Mock ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²ΡΡŽΠ΄Ρƒ ΠΈ ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π’Π°Ρˆ ΠΊΠΎΠ΄ Π½Π΅ придётся ΠΏΠΎΠ΄ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ тСстированиС, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ быстрСС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, быстрСС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

МоТно Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΠ· тСстов всё лишнСС, всё Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π΅ врСмя ΠΈ рСсурсы, оставив Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ.

Настройки ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ТёсткиС (spec), Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΈΠ΅, ΠΈ ΠΏΠ°Ρ‚Ρ‡ΠΈ Π½Π΅ ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π·Π° собой слСдов.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Моки Π½Π΅ ΠΊΡƒΡΠ°ΡŽΡ‚ΡΡ! ОсваиваСм ΠΌΠΎΠΊΠΈΠ½Π³ с React Testing Library

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании

Они ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ простыС ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ тСсты. Π’ этой сСрии статСй я ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ Π²Π°ΠΌ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΎΠΏΠΈΡ€Π°ΡŽΡΡŒ ΠΏΡ€ΠΈ написании ΠΌΠΎΠΊΠΎΠ² (mocks ΠΈΠ»ΠΈ β€œΠ·Π°Π³Π»ΡƒΡˆΠ΅ΠΊβ€) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² React.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала вспомним, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊ?

Π’ ΠΌΠΈΡ€Π΅ JavaScript Ρ‚Π΅Ρ€ΠΌΠΈΠ½ mock ΠΎΡ‡Π΅Π½ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСтся для обозначСния любой ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ тСстового Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠ° (test double). Π˜ΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” это просто значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π² вашСм производствСнном ΠΊΠΎΠ΄Π΅ Π²ΠΎ врСмя выполнСния тСстов. Они ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΡΡŽΡ‚ Π½Π° сСбя интСрфСйс замСняСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ вашСго ΠΊΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ.

Π•ΡΡ‚ΡŒ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ это ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ; ΠΌΡ‹ рассмотрим ΠΈΡ… Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

Если Π²Π°ΠΌ интСрСсно ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… рСализациях, ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³Ρƒ ΠœΠ°Ρ€Ρ‚ΠΈΠ½Π° Π€Π°ΡƒΠ»Π΅Ρ€Π° «Моки β€” Π½Π΅ Π·Π°Π³Π»ΡƒΡˆΠΊΠΈΒ».

Jest ΠΈ ΠΌΠΎΠΊΠΈΠ½Π³

Π’ ΠΊΠ½ΠΈΠ³Π΅ Mastering React Test-Driven Development я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ES6 для создания тСстовых Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ². Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π°Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС гибкости, Π½ΠΎ выглядит слСгка Π±ΠΎΠ»Π΅Π΅ хакСрским.

На страницС Jest ΠΏΡ€ΠΎ jest.mock говорится, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΊΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ ваши тСсты Π±ΡƒΠ΄ΡƒΡ‚ быстрыми ΠΈ Π½Π΅ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌΠΈ.

Π₯отя это ΠΏΡ€Π°Π²Π΄Π°, это Π½Π΅ основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΌΠΎΠΊΠΈ.
Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΌΠΎΠΊΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΌΠ½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΈ тСсты нСзависимыми Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠΎΠΊΠΈ?

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ тСсты Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ состоянии становится слоТнСС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ тСст ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ слоТный сСтап, ΠΈ Π½Π°Π±ΠΎΡ€ тСстов Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΎΠ΅Π΄Π°Ρ‚ΡŒ всС большС вашСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ β€” брСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ.

Π­Ρ‚ΠΎ распространСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ я всС врСмя Π²ΠΈΠΆΡƒ Π΅Π΅ Π² ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π°Π·Π°Ρ… React. Наборы тСстов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π² сбоях ΠΌΠ½ΠΎΠ³ΠΈΡ… тСстов.

Но Ρ‡Ρ‚ΠΎ, Ссли Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ PostContent ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты?

Набор тСстов Π² BlogPage.test.js Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΎ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктах ΠΈ β€‹β€‹Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…. НапримСр, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π°Π³ΠΎΡ‚ΠΎΠ²Π΅ fetch ΠΎΡ‚Π²Π΅Ρ‚.

Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ раздСлСния Π½Π°ΡˆΠΈΡ… тСстовых Π½Π°Π±ΠΎΡ€ΠΎΠ², всС Π΅Ρ‰Π΅ сущСствуСт.

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ нашСго тСстирования, бСзусловно, стала Π»ΡƒΡ‡ΡˆΠ΅, Π½ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ сдСлало наши тСсты ΠΌΠ΅Π½Π΅Π΅ Ρ…Ρ€ΡƒΠΏΠΊΠΈ, Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

Π’Π°ΠΊ Π»ΠΈ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ?

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΠ°Ρ€Π° слов ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΈΠ· области сквозных тСстов Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… тСстов.

НаличиС тСстовых Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ² β€” ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты.

МногиС ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ тСстировщики сразу ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… тСстов (ΠΈ ΠΌΠΎΠΊΠΎΠ²), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ роста ΠΈΡ… ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ тСстов.

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС, Ρ‡Π΅ΠΌ сквозныС. Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°Π»Ρ‹, Ρ‡Ρ‚ΠΎ часто Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π½Π΅ большС Ρ‚Ρ€Π΅Ρ…-Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… строк ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°ΠΌΠΈ для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ кодирования, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π½ΠΎΠ΅ ΠΈ ансамблСвоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π”Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС, тСстовыС Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΈ Π½Π΅ всСгда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ β€” это просто Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ инструмСнт Π² вашСм Π½Π°Π±ΠΎΡ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ mocks Π² ΡŽΠ½ΠΈΡ‚-тСстировании

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ являСтся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Β«When to MockΒ».

ИспользованиС ΠΌΠΎΠΊΠΎΠ² Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΌ тСстировании являСтся спорной Ρ‚Π΅ΠΌΠΎΠΉ. Автор ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ Π½Π° протяТСнии всСй своСй ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ½ сначала ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» ΠΎΡ‚ ΠΌΠΎΠΊΠΎΠ² ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π°Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΊ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ΅ Β«Π±Π΅Π· ΠΌΠΎΠΊΠΎΠ²Β», Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊ Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΊΠΈ для Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй».

Ни ΠΎΠ΄Π½Π° ΠΈΠ· этих ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ Π½Π΅ являСтся достаточно Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π₯ΠΎΡ€ΠΈΠΊΠΎΠ² ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ зависимости слСдуСт ΠΌΠΎΠΊΠ°Ρ‚ΡŒ, Π° ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ Π² тСстах.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ mock (ΠΌΠΎΠΊ, ΠΎΡ‚ Π°Π½Π³Π». «пародия», «имитация»)?

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ‚Π΅ΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΊΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ обсудим, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊ. Π›ΡŽΠ΄ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ тСстовый Π΄Π²ΠΎΠΉΠ½ΠΈΠΊ (test double) ΠΈ ΠΌΠΎΠΊ (mock) ΠΊΠ°ΠΊ синонимы, Π½ΠΎ тСхничСски это Π½Π΅ Ρ‚Π°ΠΊ:

Мок – это лишь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² Ρ‚Π°ΠΊΠΈΡ… зависимостСй.

Богласно Π–Π΅Ρ€Π°Ρ€Ρƒ ΠœΠ΅ΡΠ°Ρ€ΠΎΡˆΡƒ, сущСствуСт 5 Π²ΠΈΠ΄ΠΎΠ² тСстовых Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ²:

Π’Π°ΠΊΠΎΠ΅ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΡƒΠ³Π°ΡŽΡ‰ΠΈΠΌ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ всС ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сгруппированы всСго Π² Π΄Π²Π° Ρ‚ΠΈΠΏΠ°: ΠΌΠΎΠΊΠΈ ΠΈ стабы.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя Ρ‚ΠΈΠΏΠ°ΠΌΠΈ сводится ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

Моки ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ исходящиС (outcoming) взаимодСйствия. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡ‹Π΅ тСстируСмой систСмой (SUT) ΠΊ Π΅Π΅ зависимостям для измСнСния ΠΈΡ… состояния.

Π‘Ρ‚Π°Π±Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ входящиС (incoming) взаимодСйствия. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡ‹Π΅ SUT ΠΊ Π΅Π΅ зависимостям для получСния Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π‘Π” являСтся входящим (incoming) взаимодСйствиСм β€” ΠΎΠ½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠΌΡƒ эффСкту. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ тСстовый Π΄Π²ΠΎΠΉΠ½ΠΈΠΊ являСтся стабом.

ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ тСстовых Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ дСталями Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

Spies (ΡˆΠΏΠΈΠΎΠ½Ρ‹) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ‚Ρƒ ΠΆΠ΅ Ρ€ΠΎΠ»ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΌΠΎΠΊΠΈ. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ spies ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π° ΠΌΠΎΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… инструмСнтов. Иногда spies Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ рукописными ΠΌΠΎΠΊΠ°ΠΌΠΈ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ стабами, dummy (ΠΏΡƒΡΡ‚Ρ‹ΡˆΠΊΠ°ΠΌΠΈ) ΠΈ Ρ„Π΅ΠΉΠΊΠ°ΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, насколько ΠΎΠ½ΠΈ ΡƒΠΌΠ½Ρ‹:

Π‘Ρ‚Π°Π± послоТнСС. Π­Ρ‚ΠΎ полноцСнная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ настраиваСтС для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для Ρ€Π°Π·Π½Ρ‹Ρ… сцСнариСв.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠΊΠ°ΠΌΠΈ ΠΈ стабами (ΠΏΠΎΠΌΠΈΠΌΠΎ исходящих ΠΈ входящих взаимодСйствий). Моки ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ SUT ΠΈ Π΅Π³ΠΎ зависимостями, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ стабы ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти взаимодСйствия. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅.

Мок-ΠΊΠ°ΠΊ-инструмСнт vs. ΠΌΠΎΠΊ-ΠΊΠ°ΠΊ-тСстовый-Π΄Π²ΠΎΠΉΠ½ΠΈΠΊ

Но Ρƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΠΌΠΎΠΊ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° классы ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (для создания ΠΌΠΎΠΊΠΎΠ²) ΠΊΠ°ΠΊ Π½Π° ΠΌΠΎΠΊΠΈ. Π­Ρ‚ΠΈ классы ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ настоящиС ΠΌΠΎΠΊΠΈ, Π½ΠΎ сами ΠΏΠΎ сСбС ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΠΊΠ°ΠΌΠΈ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ:

Π’Π°ΠΆΠ½ΠΎ Π½Π΅ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΊ-ΠΊΠ°ΠΊ-инструмСнт с ΠΌΠΎΠΊ-ΠΊΠ°ΠΊ-тСстовый-Π΄Π²ΠΎΠΉΠ½ΠΈΠΊ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΊ-ΠΊΠ°ΠΊ-инструмСнт для создания ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² тСстовых Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ²: ΠΌΠΎΠΊΠΎΠ² ΠΈ стабов.

НС провСряйтС взаимодСйствия со стабами

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ исходящиС взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ SUT ΠΈ Π΅Π³ΠΎ зависимостями, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ стабы ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ входящиС взаимодСйствия, Π° Π½Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΡ….

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Π²Ρ‹Π·ΠΎΠ² GetNumberOfUsers() Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ. Π­Ρ‚ΠΎ внутрСнняя Π΄Π΅Ρ‚Π°Π»ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΡΠ°ΡŽΡ‰Π°ΡΡΡ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ SUT собираСт Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для создания ΠΎΡ‚Ρ‡Π΅Ρ‚Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° этого Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ уязвимости тСста. НСваТно, ΠΊΠ°ΠΊ SUT Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ссли этот Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ…Ρ€ΡƒΠΏΠΊΠΎΠ³ΠΎ тСста:

Вакая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Ρ‚Π°ΠΊΠΆΠ΅ называСтся Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ спСцификациСй.

БовмСстноС использованиС ΠΌΠΎΠΊΠΎΠ² ΠΈ стабов

Иногда Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ тСстовый Π΄Π²ΠΎΠΉΠ½ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ проявляСт свойства ΠΊΠ°ΠΊ ΠΌΠΎΠΊΠ°, Ρ‚Π°ΠΊ ΠΈ стаба:

Π­Ρ‚ΠΎΡ‚ тСст ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ storeMock для Π΄Π²ΡƒΡ… Ρ†Π΅Π»Π΅ΠΉ: ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΈ провСряСт Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, сдСланный SUT.

Однако ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: тСст устанавливаСт ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ HasEnoughInventory(), Π½ΠΎ Π·Π°Ρ‚Π΅ΠΌ провСряСт Π²Ρ‹Π·ΠΎΠ² RemoveInventory(). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, здСсь Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ взаимодСйствия со стабами.

Mocks vs. stubs ΠΈ commands vs. queries

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΌΠΎΠΊΠΎΠ² ΠΈ стабов связано с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ command-query separation (CQS). ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ CQS гласит, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π»ΠΈΠ±ΠΎ запросом, Π½ΠΎ Π½Π΅ ΠΎΠ±ΠΎΠΈΠΌΠΈ:

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, задавая вопрос, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚. Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅, становится Π»Π΅Π³Ρ‡Π΅ для чтСния. ВСстовыС Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΈ, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, становятся ΠΌΠΎΠΊΠ°ΠΌΠΈ. Аналогично, тСстовыС Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΈ, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ запросы, ΡΠ²Π»ΡΡŽΡ‚ΡΡ стабами:

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π· Π½Π° Π΄Π²Π° тСста ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

Когда ΠΌΠΎΠΊΠ°Ρ‚ΡŒ?

Π Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ со всСми этими опрСдСлСниями, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΊΠΈ.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠΊΠ°Ρ‚ΡŒ саму Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ систСму (SUT), поэтому вопрос «Когда ΠΌΠΎΠΊΠ°Ρ‚ΡŒ?Β» сводится ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ: «КакиС Ρ‚ΠΈΠΏΡ‹ зависимостСй Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° ΠΌΠΎΠΊΠΈ, Π° ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² тСстах?Β»

Π’ΠΎΡ‚ всС Ρ‚ΠΈΠΏΡ‹ зависимостСй ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° пСрСчислил Π² своСй ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅:

БовмСстная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ соотвСтствуСт измСняСмой внСпроцСссорной зависимости (mutable out-of-process dependency) Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, поэтому Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ здСсь эти Π΄Π²Π° понятия ΠΊΠ°ΠΊ синонимы. (ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ постом Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€Π° Π₯ΠΎΡ€ΠΈΠΊΠΎΠ²Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС: Unit Testing Dependencies: The Complete Guide.)

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ ΡˆΠΊΠΎΠ»Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования с собствСнными взглядами Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ зависимостСй слСдуСт Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° ΠΌΠΎΠΊΠΈ:

Лондонская школа (Ρ‚Π°ΠΊΠΆΠ΅ извСстная ΠΊΠ°ΠΊ школа mockist) выступаСт Π·Π° Π·Π°ΠΌΠ΅Π½Ρƒ всСх измСняСмых зависимостСй Π½Π° ΠΌΠΎΠΊΠΈ.

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ школа (Ρ‚Π°ΠΊΠΆΠ΅ извСстная ΠΊΠ°ΠΊ школа Π”Π΅Ρ‚Ρ€ΠΎΠΉΡ‚Π°) выступаСт Π·Π° Π·Π°ΠΌΠ΅Π½Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‰ΠΈΡ… (измСняСмых внСпроцСссорных) зависимостСй.

ОбС ΡˆΠΊΠΎΠ»Ρ‹ ΠΎΡˆΠΈΠ±Π°ΡŽΡ‚ΡΡ Π² своСм ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΊ ΠΌΠΎΠΊΠ°ΠΌ, хотя классичСская школа мСньшС, Ρ‡Π΅ΠΌ лондонская.

Моки ΠΈ нСизмСняСмыС внСпроцСссорныС зависимости.

А ΠΊΠ°ΠΊ насчСт ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹Ρ… внСпроцСссорных (immutable out-of-process) зависимостСй? Π Π°Π·Π²Π΅ ΠΈΡ… Π½Π΅ стоит ΠΌΠΎΠΊΠ°Ρ‚ΡŒ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΏΠΎ мнСнию ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· школ? НСизмСняСмыС внСпроцСссорныС зависимости (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, слуТба API Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния) слСдуСт Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ тСстовым Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠΌ, Π½ΠΎ этот тСстовый Π΄Π²ΠΎΠΉΠ½ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ стабом, Π° Π½Π΅ ΠΌΠΎΠΊΠΎΠΌ.

Π­Ρ‚ΠΎ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ ΠΈΠ·-Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠΊΠ°ΠΌΠΈ ΠΈ стабами:

ВзаимодСйствия с ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ внСпроцСссорными зависимостями ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΡΠ²Π»ΡΡŽΡ‚ΡΡ входящими ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Π² тСстах, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ (ΠΎΠ±Π΅ ΡˆΠΊΠΎΠ»Ρ‹ с этим согласны).

НС ΠΌΠΎΠΊΠ°ΠΉΡ‚Π΅ всС измСняСмыС зависимости

НС стоит ΠΌΠΎΠΊΠ°Ρ‚ΡŒ всС измСняСмыС зависимости. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: внутрисистСмный ΠΈ мСТсистСмный.

ВнутрисистСмныС ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ дСталями Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ взаимодСйствиС, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ проходят ваши Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ классы для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΈΡ… наблюдаСмого повСдСния. Π­Ρ‚ΠΎ взаимодСйствиС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСпосрСдствСнной связи с Ρ†Π΅Π»ΡŒΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, связь с Ρ‚Π°ΠΊΠΈΠΌ взаимодСйствиСм ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌ тСстам.

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

ИспользованиС ΠΌΠΎΠΊΠΎΠ² закрСпляСт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ тСстируСмой систСмой ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ. Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ связи ΠΌΠ΅ΠΆΠ΄Ρƒ вашСй систСмой ΠΈ внСшними прилоТСниями. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, использованиС ΠΌΠΎΠΊΠΎΠ² для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ связи ΠΌΠ΅ΠΆΠ΄Ρƒ классами Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСй систСмы связываСт ваши тСсты с дСталями Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, дСлая ΠΈΡ… Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌΠΈ. ВнутрисистСмныС связи ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ измСняСмым внутрипроцСссорным зависимостям:

Π˜Ρ‚Π°ΠΊ, лондонская школа ΠΎΡˆΠΈΠ±Π°Π΅Ρ‚ΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° поощряСт использованиС ΠΌΠΎΠΊΠΎΠ² для всСх измСняСмых зависимостСй ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ различия ΠΌΠ΅ΠΆΠ΄Ρƒ внутрисистСмными (внутрипроцСссорными) ΠΈ мСТсистСмными (внСпроцСссорными) коммуникациями.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ тСсты ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ связь ΠΌΠ΅ΠΆΠ΄Ρƒ классами Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ связь ΠΌΠ΅ΠΆΠ΄Ρƒ вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ внСшними систСмами. Π­Ρ‚ΠΎ Π½Π΅ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС ΠΌΠΎΠΊΠΎΠ² являСтся ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ слСдованиС лондонской школС часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌ тСстам β€” тСстам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с дСталями Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

НС ΠΌΠΎΠΊΠ°ΠΉΡ‚Π΅ всС внСпроцСссорныС зависимости

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ школа Π»ΡƒΡ‡ΡˆΠ΅ справляСтся с этим вопросом, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° выступаСт Π·Π° Π·Π°ΠΌΠ΅Π½Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ внСпроцСссорных зависимостСй, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ слуТба SMTP, шина сообщСний ΠΈ Ρ‚. Π΄. Но классичСская школа Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ идСальна ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ мСТсистСмным коммуникациям. Π­Ρ‚Π° школа Ρ‚Π°ΠΊΠΆΠ΅ поощряСт Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ΅ использованиС ΠΌΠΎΠΊΠΎΠ², хотя ΠΈ Π½Π΅ Ρ‚Π°ΠΊ сильно, ΠΊΠ°ΠΊ лондонская школа.

НС всС внСпроцСссорныС зависимости слСдуСт ΠΌΠΎΠΊΠ°Ρ‚ΡŒ. Если внСпроцСссорная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ связь с Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ наблюдаСмого повСдСния вашСй систСмы. ВнСпроцСссорная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, которая Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒΡΡ ΠΈΠ·Π²Π½Π΅, ΠΏΠΎ сути, дСйствуСт ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ вашСго прилоТСния. Бвязи с Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ становятся дСталями Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ послС Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΊΠΎΠ².

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

Но ΠΊΠΎΠ³Π΄Π° вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ дСйствуСт ΠΊΠ°ΠΊ прокси-сСрвСр для внСшнСй систСмы, ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΉ прямой доступ, Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости исчСзаСт. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ вмСстС с этой внСшнСй систСмой, ΠΈ это Π½Π΅ повлияСт Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π‘Ρ…Π΅ΠΌΠ° взаимодСйствия с Ρ‚Π°ΠΊΠΎΠΉ систСмой становится Π΄Π΅Ρ‚Π°Π»ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

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

ИспользованиС ΠΌΠΎΠΊΠΎΠ² для внСпроцСссорных зависимостСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌ тСстам. Π’Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши тСсты ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ красными ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² Π‘Π” ΠΈΠ»ΠΈ измСняСтС Ρ‚ΠΈΠΏ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅. Π‘Π” ΠΈ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° систСма.

Π­Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ раздСляСт внСпроцСссорныС зависимости Π½Π° Π΄Π²Π΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

УправляСмыС (managed) зависимости β€” внСпроцСссорныС зависимости, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ. Π­Ρ‚ΠΈ зависимости доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅; взаимодСйствия с Π½ΠΈΠΌΠΈ Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΠΌΠΈΡ€Ρƒ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся Π‘Π” прилоТСния. Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ систСмы Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ прямого доступа ΠΊ вашСй Π‘Π”; ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ это Ρ‡Π΅Ρ€Π΅Π· API, прСдоставляСмый вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Волько нСуправляСмыС зависимости Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΌΠΎΠΊΠ°ΠΌΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ экзСмпляры управляСмых зависимостСй Π² тСстах.

РСзюмС

БущСствуСт ΠΏΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² тСстовых Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ² β€” dummy (ΠΌΠ°Π½Π΅ΠΊΠ΅Π½), стаб, spy (шпион), ΠΌΠΎΠΊ ΠΈ Ρ„Π΅ΠΉΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всСго Π² Π΄Π²Π° Ρ‚ΠΈΠΏΠ°: ΠΌΠΎΠΊΠΈ ΠΈ стабы.

Spies Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΌΠΎΠΊΠΈ; dummy ΠΈ Ρ„Π΅ΠΉΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ‚Ρƒ ΠΆΠ΅ Ρ€ΠΎΠ»ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ стабы.

Различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠΊΠ°ΠΌΠΈ ΠΈ стабами:

Моки ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ исходящиС взаимодСйствия: Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΎΡ‚ SUT ΠΊ Π΅Π³ΠΎ зависимостям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ состояниС этих зависимостСй.

Π‘Ρ‚Π°Π±Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ входящиС взаимодСйствия: для получСния Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… SUT обращаСтся ΠΊ своим зависимостям.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° взаимодСйствия со стабами всСгда ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌ тСстам.

ВСстовыС Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΈ, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ CQS, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΠΊΠ°ΠΌΠΈ. ВСстовыС Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΈ, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ запросы CQS, ΡΠ²Π»ΡΡŽΡ‚ΡΡ стабами.

ВнСпроцСссорныС зависимости ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 2 ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: управляСмыС ΠΈ нСуправляСмыС зависимости.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ экзСмпляры управляСмых зависимостСй Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… тСстах; Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ нСуправляСмыС зависимости ΠΌΠΎΠΊΠ°ΠΌΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Моки, стабы ΠΈ ΡˆΠΏΠΈΠΎΠ½Ρ‹ Π² Spock Framework

Spock прСдоставляСт 3 ΠΌΠΎΡ‰Π½Ρ‹Ρ… (Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎ сути) инструмСнта, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… написаниС тСстов: Mock, Stub ΠΈ Spy.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ часто ΠΊΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, трСбуСтся Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с внСшними модулями, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ зависимостями (Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ collaborators, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ распространён Π² русскоязычной срСдС).

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты Ρ‡Π°Ρ‰Π΅ всСго Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ для тСстирования ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΊΠΎΠ²: Mock, Stub ΠΈ Spy. Π’Π°ΠΊ тСсты Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Π΄Ρ‘ΠΆΠ½Π΅Π΅ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅ΠΆΠ΅ Π»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ зависимостСй ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚.

Π’Π°ΠΊΠΈΠ΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ тСсты ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ зависимостСй.

ΠžΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Spock Framework для написания тСстов, я Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Ρƒ ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ способа ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‹ зависимостСй. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π΅ΡΡ‚ΡŒ максимально краткая ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° для создания ΠΌΠΎΠΊΠΎΠ².

Mocks

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Mock для:

Stubs

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Stub для:

Spies

Π‘ΠΎΠΉΡ‚Π΅ΡΡŒ шпионов (Spy). Как сказано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Spock:

ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ стоит ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄ΠΈΠ·Π°ΠΉΠ½ вашСго Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ваш ΠΊΠΎΠ΄.

Но Ρ‚Π°ΠΊ ΡƒΠΆ случаСтся, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с лСгаси ΠΊΠΎΠ΄ΠΎΠΌ. ЛСгаси ΠΊΠΎΠ΄ Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠΎΠΊΠΎΠ² ΠΈ стабов. Π’ этом случаС Π΅ΡΡ‚ΡŒ всСго ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Spy.

Π›ΡƒΡ‡ΡˆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ лСгаси ΠΊΠΎΠ΄, ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ тСстами с использованиСм Spy, Ρ‡Π΅ΠΌ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ тСстов для лСгаси совсСм.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Spy для:

Mocks

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании

Π’ этом сцСнарии ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚:

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ тСст создаёт ΠΌΠΎΠΊ сСрвиса:

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ 4 Π²Π°ΠΆΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

Stubs

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ тСстируСмый ΠΊΠΎΠ΄ зависимости? ЯвляСтся Π»ΠΈ Ρ†Π΅Π»ΡŒΡŽ тСстирования ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ тСстируСмый ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€ΠΈ взаимодСйствии с зависимостями? Π―Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² зависимостСй Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ значСниями для тСстируСмого ΠΊΠΎΠ΄Π°?

Если ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ тСстируСмого ΠΊΠΎΠ΄Π° измСняСтся Π² зависимости ΠΎΡ‚ повСдСния зависимостСй, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стабы (Stub).

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с FooController ΠΈ FooService ΠΈ протСстируСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ стабов.

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ стаб ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ 4 Π²Π°ΠΆΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

Spies

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π° Π½Π΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ этот Ρ€Π°Π·Π΄Π΅Π».

ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°ΠΉΡ‚Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ.

Всё Π΅Ρ‰Ρ‘ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅? Ну Ρ‡Ρ‚ΠΎ ΠΆ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ со Spy.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² тСстировании

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Spy. Как сказано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Spock:

ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ стоит ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄ΠΈΠ·Π°ΠΉΠ½ вашСго Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ваш ΠΊΠΎΠ΄.

ΠŸΡ€ΠΈ этом Π±Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ приходится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с лСгаси ΠΊΠΎΠ΄ΠΎΠΌ. ЛСгаси ΠΊΠΎΠ΄ Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ стабов. Π’ этом случаС шпион остаётся СдинствСнным ТизнСспособным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ.

Π¨ΠΏΠΈΠΎΠ½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΌΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ стабов, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ ΠΊΠ°ΠΊ Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ.

Когда Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ подмСняСтся ΠΌΠΎΠΊΠΎΠΌ ΠΈΠ»ΠΈ стабом, создаСтся тСстовый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° настоящий исходный ΠΊΠΎΠ΄ зависимости Π½Π΅ выполняСтся.

Π¨ΠΏΠΈΠΎΠ½, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ основной исходный ΠΊΠΎΠ΄ зависимости, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» создан шпион, Π½ΠΎ шпион ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ шпион, ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΊΠΈ ΠΈ стабы. (ΠžΡ‚ΡΡŽΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Spy).

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр-шпион довольно просто:

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ 4 Π²Π°ΠΆΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

Какой ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: Mock, Stub ΠΈΠ»ΠΈ Spy?

Π­Ρ‚ΠΎ вопрос, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ. Π­Ρ‚ΠΎΡ‚ FAQ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ, Ссли Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Q: ЯвляСтся Π»ΠΈ Ρ†Π΅Π»ΡŒΡŽ тСстирования ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ тСстируСмым ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ зависимостями?

A: Если Π²Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΈ Π”Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Mock

Q: ЯвляСтся Π»ΠΈ Ρ†Π΅Π»ΡŒΡŽ тСстирования ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ тСстируСмый ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π΅Ρ€Π½ΠΎ ΠΏΡ€ΠΈ взаимодСйствии с зависимостями?

A: Если Π²Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΈ Π”Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Stub

Q: Π―Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² зависимостСй Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ значСниями для тСстируСмого ΠΊΠΎΠ΄Π°?

A: Если Π²Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΈ Π”Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Stub

Q: Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ с лСгаси ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‡Π΅Π½ΡŒ слоТно ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ Ρƒ вас Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²?

A: ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Spy

Код ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ΄ всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² этой ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ ссылкС:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

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

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