μΆμ² : λ΄μΌλ°°μμΊ ν
μ λ(λ¨μ) ν μ€νΈ : λ©μλ λ¨μλ‘ ν μ€νΈλ₯Ό μν
ν΅ν© ν μ€νΈ : μ΄ν리μΌμ΄μ μ μ 체 λμμ΄ μ μμ μΌλ‘ λμνλμ§ μν
F.I.R.S.T μμΉ
- Fast : λ¨μ ν μ€νΈλ λΉ¨λΌμΌ νλ€.
- Independent : λ¨μ ν μ€νΈλ κ°κ°μ ν μ€νΈκ° μ°κ΄λμ§ μκ³ , κ³ λ¦½λμ΄μΌ νλ€. μ¦ λ 립μ μ΄μ΄μΌ νλ€.
- Repeatable : λ¨μν μ€νΈλ λ°λ³΅ κ°λ₯ν΄μΌνλ€. λ°λ³΅μ μΌλ‘ ν μ€νΈλ₯Ό μνν΄λ, κ²°κ³Όλ κ°μμΌ νλ€.
- Self-validating : μ체μ μΌλ‘ ν μ€νΈ κ²°κ³Όκ° λμΆλμΌνλ€. (κ°λ°μκ° print μ°μ΄μ λΉκ΅νλκ² μλκ³ μλμΌλ‘ μνλλ©° μ±κ³΅/μ€ν¨ μ κ²°κ³Όκ° λμ€λ κ²)
- Timely : λ¨μ ν μ€νΈλ μ€μ μ½λλ³΄λ€ λ¨Όμ ꡬνν΄μΌνλ€. (TDDμΌ κ²½μ°μλ§ ν΄λΉ)
Given-When-Then ν¨ν΄
- Given : ν μ€νΈμ νμν λ³μλ₯Ό μ μνκ±°λ Mock κ°μ²΄λ₯Ό ν΅ν΄ νΉμ μν©μ λν νλμ μ μ
- When: μ€μ ν μ€νΈλ₯Ό νλ λ©μλκ° νΈμΆλλ©° ν μ€νΈλ₯Ό ν΅ν κ²°κ³Όκ°μ κ°μ Έμ¨λ€.
- Then: When λ¨κ³μμ λμ¨ κ²°κ³Όκ°μ κ²μ¦νλ μμ μ μν
Junit + Mockito
Junit : μλ°μ ν μ€νΈ νλ μμν¬
Mockito : Mock κ°μ²΄ μμ±, κ΄λ¦¬, κ²μ¦ νλ μμν¬
~ κ°μ§ κ°μ²΄μ μμ‘΄μ± μ£Όμ μ μν΄ νμν μ΄λ Έν μ΄μ
@Mock : Mock κ°μ²΄ μμ± λ° λ°ν μ΄λ Έν μ΄μ
@Spy : Stubνμ§ μμ λ©μλ(κ°μ§ λ©μλκ° μλ)λ μλ³Έ λ©μλ κ·Έλλ‘ μ¬μ©νλ μ΄λ Έν μ΄μ
@InjectMocks : @Mock λλ @Spyλ‘ μμ±λ κ°μ§ κ°μ²΄ μλ μ£Όμ μ΄λ Έν μ΄μ
ex) UserController λ¨μ ν μ€νΈλ₯Ό μ§νν λ, @Mock μ΄λ Έν μ΄μ μ ν΅ν΄ κ°μ§ UserServiceλ₯Ό λ§λ€κ³ , @InjectMocksλ₯Ό ν΅ν΄ UserControllerμ μ΄λ₯Ό μ£Όμ ν μ μλ€
@ExtendWith(MockitoExtension.class) : Junitκ³Ό Mockitoλ₯Ό μ°κ²°μμΌμ£Όλ μ΄λ Έν μ΄μ
@DisplayName(" ") : ν μ€νΈ λ©μλ λΌλ²¨λ§ μ΄λ Έν μ΄μ
Junitμ μλͺ μ£ΌκΈ°
ν μ€νΈ μμμ κ΄μ¬νκ² λλ μ΄λ Έν μ΄μ
@BeforeAll : ν μ€νΈ μμ μ νΈμΆλλ λ©μλ
@BeforeEach : κ° ν μ€νΈ λ©μλ μ€ν μ νΈμΆλλ λ©μλ
@AfterAll : ν μ€νΈ μ’ λ£ μ νΈμΆλλ λ©μλ
@AfterEach : κ° ν μ€νΈ λ©μλ μ’ λ£ μ νΈμΆλλ λ©μλ
μμ ν¬μΈνΈ
-> λ©μλ λ΄ μ’ μμ± κ°μ²΄λ Mockingν΄ κ°μ§ κ°μ²΄λ₯Ό λ§λ€κ³ ν΄λΉ λΉμ¦λμ€ λ‘μ§μ΄ μ μμ μΌλ‘ μλνλ κ²λ§μ 보λ κ²μ΄λ€.
ex) μλΉμ€ λ¨μν μ€νΈλ₯Ό μ§νν λ, DB κ²μ λ±μ μννμ§ μλλ€
-> λ°ν κ°μ΄ μλ λ©μλλ μνλμ§ μλλ€.
-> Then λ¨κ³μμλ μ£Όλ‘ assert λ¬Έμ μ¬μ©νλ€.
-> HttpServletResponseλ ν΄λΉνλ Mock κ°μ²΄(MockHttpServletResponse νμ )λ₯Ό μμ±ν΄ μΈμ κ°μΌλ‘ νμ©νλ©΄ λλ€
01.30
ν μ€νΈ ν΄λμ€ μμ± - μλ² κ΅¬λλ°©λ² μ ν(@ExtendWtih λ±) - νλ μμ± + Mocking - λ©μλ μμ± (when - given - then)- ν μ€νΈ
κ°μμμ μ¬μ©ν MockMvcBuilders ν΄λμ€
μ λ² μ€μ΅ λ λ³Έ @SpringBootTest + MockMvc + @TestConstructor
https://gaemi606.tistory.com/entry/JUnit-5-ExtendWith-MockMvc-TestConstructor
* 컨νΈλ‘€λ¬ λ μ΄μ΄μ λν λ¨μ ν μ€νΈλ κ·Έ λ‘μ§μ΄ 볡μ‘νμ§ μκ³ ν μ€νΈ νμμ±μ΄ λ€λ₯Έ ν μ€νΈμ λΉν΄ ν¬μ§ μμ λ¨μ ν μ€νΈ μ½λ μμ±μ νμμ±μ΄ λ¨μ΄μ§λ€ & λ€λ₯Έ νλ‘μ νΈμ 컨νΈλ‘€λ¬ ν μ€νΈ μ½λμ μ μ¬ν μ μ΄ λ§λ€
~ ν΅ν©ν μ€νΈ, ν¬μ€νΈλ§¨μ ν΅ν ν μ€νΈκ° λ³΄λ€ λ°λμ§νλ€
λ ν¬μ§ν 리 ν μ€νΈ : κΈ°λ³Έ λ©μλλ μ΄λ―Έ μμ±λμ΄ μ 곡λκΈ° λλ¬Έμ ν μ€νΈν νμ μλ€
Mocking ν νμ μλ€