TDD κ°λ° λ°©μ
TDD λ ν μ€νΈ μ½λλ₯Ό μμ±ν λ€μ μ€μ μ½λλ₯Ό μμ±νλ κ²μ΄λ€.
ν μ€νΈκ° ν΅κ³Όλ μ½λλ§μ μ€μ μ½λλ‘ μμ±νλ€ -> λ²κ·Έκ° μ€κ³ μμ€κ° κ°κ²°ν΄μ§λ©° μ€κ³κ° κ°μ λλ€.
- μ€κ³ λ¨κ³μμ νλ‘κ·Έλλ° λͺ©μ μ 미리 μ μνλ€.
- 무μμ ν μ€νΈν΄μΌ ν μ§ λ―Έλ¦¬ μ μνλ€.
- ν μ€νΈ μ½λ μμ± λμ€ λ°μνλ μμΈ μ¬νμ ν μ€νΈ μΌμ΄μ€μ μΆκ°νλ€. (μ€κ³ κ°μ )
TDD νλ‘μΈμ€
μ€ν¨νλ μμ λ¨μ ν μ€νΈ μΆκ° -> ν μ€νΈ ν΅κ³Ό, μ΅μνμ μ½λ© -> ꡬν μ€κ³ κ°μ , μ€λ³΅ μ κ±°, 리ν©ν λ§ , ν μ€νΈ ν΅κ³Ό μ μ§
μ’μ ν μ€νΈμ νΉμ§
- Fast: ν μ€νΈλ λΉ λ₯΄κ² λμνμ¬ μμ£Ό λ릴 μ μμ΄μΌ νλ€.
- Independent: κ°κ°μ ν μ€νΈλ λ 립μ μ΄λ©° μλ‘ μμ‘΄ν΄μλ μλλ€.
- Repeatable: μ΄λ νκ²½μμλ λ°λ³΅ κ°λ₯ν΄μΌ νλ€.
- Self-Validating: ν μ€νΈλ μ±κ³΅ λλ μ€ν¨λ‘ bool κ°μΌλ‘ κ²°κ³Όλ₯Ό λ΄μ΄ μ체μ μΌλ‘ κ²μ¦λμ΄μΌ νλ€.
- Timely: ν μ€νΈλ μ μμ μ¦, ν μ€νΈνλ €λ μ€μ μ½λλ₯Ό ꡬννκΈ° μ§μ μ ꡬνν΄μΌ νλ€.
Springμμμ TDD νλ‘κ·Έλλ° λ°©λ²
- Repository -> Service -> Controller μμλ‘ κ°λ°μ μ§ννλ€.
- Repository κ³μΈ΅μ ν μ€νΈλ H2μ κ°μ μΈλ©λͺ¨λ¦¬ λ°μ΄ν°λ² μ΄μ€ κΈ°λ°μ ν΅ν© ν μ€νΈλ‘ μ§ννλ€.
- Service κ³μΈ΅μ ν μ€νΈλ Mockitoλ₯Ό μ¬μ©ν΄ Repository κ³μΈ΅μ Mockνμ¬ μ§ννλ€.
- Controller κ³μΈ΅μ ν μ€νΈλ SpringTestμ MockMvcλ₯Ό μ¬μ©ν΄ μ§ννλ€.
μ°Έκ³ (μμ μ’λ€ μ 리 짱짱 γ γ π₯°)
https://mangkyu.tistory.com/143
μν©μ λ°λ₯Έ μμ
1. μνλ Item μ μ°Ύμ λ κ²°κ³Όκ°μ΄ μ‘΄μ¬νμ§ μμ λ Exception μ΄ μλ null (ListμΌ κ²½μ° λΉ λ°°μ΄)μ λ°ννλ€.
@DisplayName("μν μ‘°νμ μνμ΄ μμλ μνμ½λ 200μ λ°ννλ€.")
@Test
void getEmptyItem() throws Exception {
//given
String name = "μ λΌλ©΄";
//when
final ResultActions actions = mvc.perform(
get("/item").param("name",name)
.contentType(MediaType.ALL_VALUE)
.accept(MediaType.APPLICATION_JSON)).andDo(print());
//then
actions.andExpect(status().isOk());
}
2. μΆμν΄λμ€ ν μ€νΈνκΈ°
μν : Mapstruct λ₯Ό μ¬μ©νκ³ μλλ° μΆμ ν΄λμ€λ‘ λ³κ²½νμ¬ μ¬μ©νκ³ μμ΄ Mapper ν μ€νΈ ν λ
//when
ItemMapper itemMapper = mock(ItemMapper.class, CALLS_REAL_METHODS);
when(itemMapper.toDetailDto(item)).thenReturn(itemDetailDto);
ItemDetailDto result = buyRequestMapper.toDetailDto(item);
'π WEB > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λλ§ μ΄λ €μ΄ μμΈμ²λ¦¬ (0) | 2022.05.19 |
---|---|
Enum Type μμ Function Interface νμ© (0) | 2022.04.01 |
Java 8 Interface - default λ©μλ, static λ©μλ (0) | 2022.03.23 |
[MapStruct] λ΄κ° μ°Ύμ μ°λ €κ³ μ 리ν κΈ (0) | 2022.03.16 |
[Lombok] Difference Between @Value and @Data (0) | 2022.03.11 |