Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠΎΠΊΠΈ Π² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ
ΠΠΎΠ΄ΡΠ»Ρ 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
ΠΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΊΠΎΠ΄ Π²ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅: