Sep. 18, 2018
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΡΠ½ΠΈΡ ΡΠ΅ΡΡΡ ΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° Dependency Injection? Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ ΡΠ½ΠΈΡ ΡΠ΅ΡΡΠΎΠ² (unit test),
Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ Π°Π²ΡΠΎΠΌΠΎΠΊ (Auto-mocking Container). ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ
ΡΡΠΏΠΊΠΈΡ
ΡΠ΅ΡΡΠΎΠ² (Fragile Test),
ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊ ΡΠ°ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (system under tests - SUT) ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½Π° ΠΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠ° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Mark Seemann.
ΠΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°: ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π½Π° ΡΡΠΎΡ ΡΠ°Π· ΡΡΠ°ΡΡΠΈ ΠΎΡ Mark Seemann ΠΎ Π°Π²ΡΠΎ-ΠΌΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ
.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΠΌΠ½Π΅ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ½ΠΈΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Auto mock-ΠΎΠ² Ρ ΡΠ·Π½Π°Π» Π½Π΅ ΡΠ°ΠΊ ΠΈ Π΄Π²Π°Π½ΠΎ.
Π§ΡΠΎ-Π±Ρ Π·Π΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π΅ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ
Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ² Π±Π΅Π· Π»ΠΈΡΠ½Π΅ΠΉ Π±ΠΎΠ»ΠΈ.
Π ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»
Jul. 15, 2018
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠ»ΡΠ°Π½ΠΈΠ΅ Π·ΠΎΠ»ΠΎΡΠΎ - ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ²Π»ΡΡΡΠ΅Π΅ΡΡ Π²Π°ΠΆΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ Unix,
ΠΊΠΎΡΠΎΡΠ°Ρ Π³Π»Π°ΡΠΈΡ, Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅Ρ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ ΡΡΠΎ-Π±Ρ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° ΡΠΊΠ°Π·Π°ΡΡ,
ΡΠΎ Π»ΡΡΡΠ΅ Π΅ΠΉ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡ.
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ
ΠΎΡΠΎΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠ°ΡΠΈΠΈ ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
ΠΊΠ°ΠΊ ΡΠ΅Π½Π½ΡΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½Π΅Π΅.
Π’ΠΎ Π΅ΡΡΡ, ΠΌΠΎΠ»ΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ±ΡΠΎΠ΄Π΅ΡΠ΅Π»ΡΡ.
ΠΠ΅Ρ Π΅Π΄ΠΈΠ½ΠΎΠΉ, ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ Unix, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π±Ρ:
βΠΠΈΡΠΈΡΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ, ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΈ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌΠΈ.
ΠΠΈΡΠΈΡΠ΅ ΠΈΡ
ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Π΄Π΅Π»Π°Π»ΠΈ ΡΡΠΎ Ρ
ΠΎΡΠΎΡΠΎ ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈβ.
Π’ΠΎ Π΅ΡΡΡ, ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠ° ΠΏΠΎΠ½ΡΡΠΈΠΉ ΠΌΠ°Π»ΠΎΡΡΠΈ, ΠΏΡΠΎΡΡΠΎΡΡ, ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ, ΠΌΠ°ΡΡΠ΅ΡΡΡΠ²Π°, ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΠΈ, ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ, ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡ, ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ, Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΈ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ.
Apr. 17, 2018
ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΈΠ· ΠΏΠΎΡΡΠ° ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ
Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ Π² Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ,
ΡΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ Π½Π° Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΊΠΎΡΠΎΡΡΠΉ Π²Π»Π°Π΄Π΅Π΅Ρ ΡΡΠΈΠΌ ΡΠ΅ΡΡΡΡΠΎΠΌ.
ΠΠ΅ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΊ Π½ΠΈΠΆΠ΅ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅.

ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ°.
ΠΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ ΠΊΠΎΠ΄ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ,
ΠΊΠΎΠ΄ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ,
Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ΅Ρ
Π½ΠΈΠΊΠΎΠΉ sync over async
.
Π’.Π΅. ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠΆΠ΄ΡΠΌΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° taskName.Wait()
.