CH02 Mockito
Last updated
Last updated
μ΄ κ°μ μ체λ₯Ό κ½€ μμ μ λ€μλ κ²μ΄κ³ , μλ λ ΈνΈλ κ·Έ λ μ 리νλ κ²μ΄λ€. λΉμμλ ν μ€νΈλ₯Ό ν λ νμν λΆλΆμμ mock κ°μ²΄ λ±μ νμ©ν΄μ ν μ€νΈλ₯Ό λ μ½κ² ν μ μμ΄μ μ’λ€κ³ μκ°νλλ° μ¬μ€ μ§κΈμ μκ°μ΄ μ’ λ°λμλ€.
mock μ μ΄μ©ν΄μ μ΄λ ν κ°μ²΄μ νλμ μ‘°μνλ€λ κ² μμ²΄κ° μ‘°μ λΉμ©μ΄ λ무 ν° μΌμ΄λ€. λκ°κ° λ°λλ©΄ μ΄ μ‘°μκΉμ§ λͺ¨λ λ°κΏμ€μΌνλλ°, μ‘°μμ΄ ν΄ μλ‘ μμ λΉμ©μ΄ λ§€μ° ν¬λ€. λ΄κ° μ§λ , λ€λ₯Έ μ¬λμ΄ μ§λμ μ½λλ ν μ€νΈ νκ³ μ νλ λͺ¨λ νΉμ λ©μλκ° νΌμΉ λͺ»νκ² κ½€ λ§μ μΌλ€μ νλλ‘ μ²λ¦¬ν΄ λ κ²½μ°μ μ΄λ€ μλλ ν μ€νΈλ₯Ό μν΄μ μ€κ°μ μ‘°μμ ν κ² λ무 λ§λ€.
κ·Έλ°λ° λ΄κ° λ§νκ³ μ νλ κ²μ λͺ¨νΉ μμ²΄κ° μμ λΉμ©μ΄ ν¬λκΉ μμ’λ€λ μ΄μΌκΈ°λ₯Ό νλ €λ κ²μ΄ μλκ³ μ μ΄μ λͺ¨νΉμ λ§μ΄ ν΄μΌν μ λλ‘ ν μ€νΈ λ¨μκ° μ»€μλ μλκ³ , κ·Έλ¬κΈ° μν΄μλ μ€κ³μ κ°μ²΄μ μ± μκ³Ό μν λ²μκ° μ΅λν μμμΌνλ€λ κ²μ΄λ€.
κ°μ²΄μ νλ ₯ ꡬ쑰λ₯Ό μ΅λν μͺΌκ°μ μ€κ³λ₯Ό ν΄λλ©΄ λκ° νΉμ λ¨μμ ν μ€νΈλ₯Ό ν λ νμν μ‘°μ νμκ° λ§€μ° μ μ΄μ§κ±°λ μμ νμκ° μμ΄μ§λ€. κ·Έλ¦¬κ³ Mockito λ₯Ό μ¬μ©νμ§ μκ³ ν μ€νΈ μ€μ½νμμ DIP λ₯Ό μ μ©ν μλ μλ€. κ·Έλ κ² μ€κ³λ₯Ό μ ν΄λλ©΄ λλ€.
μμΌλ‘ λ§μ£ΌμΉ κΈ°μ‘΄ λ κ±°μ νλ‘μ νΈ νΉμ λ΄κ° λ§λλ μλ‘μ΄ νλ‘μ νΈ λͺ¨λ μ΄λ»κ² λ μ§λ λͺ¨λ₯΄κ² κ³ , λ΄ μκ°λ μ΄λ»κ² λ°λμ§ λͺ¨λ₯΄κ² μ§λ§ μ§κΈμΌλ‘μλ Mockito μ체λ₯Ό κ·Έλ₯ μΈ μΌμ΄ μκ²λ μ€κ³λΆν° μ΅λν μ κ²½μ°μλ κ²μ΄ μ§κΈμ λμ μκ°μ΄λ€.
λ¨μ΄ μμ²΄κ° 'κ°μ§μ' μ κ°μ λ»μ κ°μ§κ³ μλ€. ν μ€νΈμμ 'λͺ© κ°μ²΄' μ κ°μ λ¨μ΄λ‘ μμ£Ό μ¬μ©λλ κ°λ μ΄λ€. ν μ€νΈλ₯Ό μν λλ―Έμ κ°λ μ΄λ€.
곡μ ννμ΄μ§ μκ° κ·Έλλ‘λ₯Ό μΈμ©νλ€.
Tasty mocking framework for unit tests in Java
JUnit 5 extensionμΌλ‘ MockitoExtensionμ μ¬μ©ν΄μΌ νλ€.
λ©μλ λ§€κ°λ³μμμ μ μΈνμ¬λ λκ³ ν΄λμ€μ λ©€λ² νλλ‘λ μ μΈνμ¬ μ¬μ©μ΄ κ°λ₯νλ€.
μΈν°νμ΄μ€μ κ°μ΄ λ€νμ±μ μν΄μ μΆμνλ ν΄λμ€λ₯Ό ν μ€νΈμμ μ¬μ©ν΄μΌ ν κ²½μ°κ° μλ€. λΏλ§ μλλΌ μΈλΆ apiμ μ°λν΄μΌ ν κ²½μ°, μνλ κ²°κ³Όκ°μ μμ μ΄ λμλ€κ³ κ°μ νκ³ κ·Έ λ€μμ νλλ€μ νλμ μ λμΌλ‘ λ³΄κ³ μ΄λ₯Ό ν μ€νΈ ν λ, κ°μ μ λλ‘ λ°μλ€κ³ κ°μ ν΄μΌ ν νμκ° μλ€. μ΄λ΄ λ, Mockκ°μ²΄λ₯Ό μ‘°μνλ©΄ μνλ ν μ€νΈ μλ리μ€λλ‘ μ λ ν μ€νΈλ₯Ό νκΈ°κ° μ©μ΄ν΄μ§λ€.
μ리λ Mockito.when~ μμ μ μ ν΄λλλ‘ κ²°κ³Όκ°μ΄ 미리 μΈν μ΄λκ³ μ€μ λ‘ ν΄λΉ μ½λκ° μ€νμ΄ λμ§λ§ κ²°κ³Όκ°μ 미리 μΈν λ κ²°κ³Όκ°μ λ°λλ‘ νλ κ²μ΄λ€. μ¦, μ€μ λ‘ socialLoginServiceμ getToken()κ° μ€νμ΄ λκΈ΄ νλλ° κ·Έκ²μ κ²°κ³Όκ°μΌλ‘ 미리 μ μν΄λ String token = βuserTokenβ; κ°μ return λ°κ² λλ κ²μ΄λ€.
μ΄λ λ― λ―Έλ¦¬ μ μν μ½μλλ‘ λ€μ΄μ¬ κ²½μ° λ―Έλ¦¬ μ μν κ°μ return νλ λ°©μμ΄κΈ° λλ¬Έμ, νλΌλ―Έν°κ° μ¬μ μ μ μνμ§ μμ λ€λ₯Έ κ²μ΄ μ€λ©΄ μ€μ λ‘ λ‘μ§λλ‘ μ²λ¦¬ν κ²°κ³Όκ° return λλ€. λ§μ½ νλΌλ―Έν°μ κ·μλμ§ μκ³ mock κ°μ²΄λ₯Ό μ¬μ©νκ³ μΆλ€λ©΄ μλμ κ°μ΄ any()λ₯Ό μ¬μ©νλ©΄ λλ€.
μΆκ°λ‘, doThrow()λ₯Ό μ΄μ©νλ©΄ 미리 μ μν κ°μ return λ°λ κ²μ΄ μλλΌ λ―Έλ¦¬ μ μν μλ¬κ° λ°μνκ²λ mock κ°μ²΄λ₯Ό νμ©ν μλ μλ€.
κ·Έλμ BDDμ μ κ°νμ¬ μ΄ν리μΌμ΄μ μ νλμ κ·μ ν λ βμ΄λ€ μν©μμ, μ΄λ€ κ²½μ°μ, μ΄λ κ² νλν΄μΌνλ€β λΌκ³ μ΄ν리μΌμ΄μ μ νλμ κΈ°λν μ μλ€. κ·Έλ¦¬κ³ μ΄λ¬ν κΈ°λλ₯Ό Mokitoλ₯Ό μ΄μ©ν΄μ μ½λλ‘ νννμλ©΄ λνμ μΈ BDD ν¬λ§·μΌλ‘ given, when, then μ μ¬μ©ν μ μλ€. μλλ κ·Έ μμμ΄λ€.
μλλ κ°μ μμ€μμ μ¬μ©λ given, when, then μμμ΄λ€.
μλλ mokitoμ κ° κ°μ§ any()λ₯Ό ν΅ν΄μ λ νΈνκ² ν μ€νΈκ° κ°λ₯νλ€.
μ€νμΌλ‘ Mokitoλ₯Ό μ¬μ©ν μ μλ€. BDDμ κΈ°λ³Έ μ² νμ κ°λ°μμ λΉκ°λ°μκ°μ collaboration μ μ κ·Ή μμνλ€λ κ²μΈλ° μ΄ν리μΌμ΄μ μ βνλβμ μν΅μ κΈ°μ€μΌλ‘ μΌλλ€. μ¦, βμ΄ν리μΌμ΄μ μ΄ μ΄λ»κ² νλν΄μΌ νλ€β λΌλ μΈ‘λ©΄μμ μ¬λ¬κ°μ§λ₯Ό κ·μ ν μ μκ³ μ΄ βνλβμ λ°νμΌλ‘ νμ¬ νΉμ κ°λ°μ€μΈ μ΄ν리μΌμ΄μ μ΄ μ μ νκ² βνλβνκ³ μλμ§λ₯Ό λ Όμν μ μλ κ²μ΄λ€.