4차산업혁명의 일꾼/웹개발

tdd 맨땅에 해딩하기..

르무엘 2024. 2. 11. 01:56

주문한 책이 안온다...

tdd를 여기저기 봐도...

이 상황에 적합한 최적화를 모르겠다.

a to z를 다 하기 보다

 

그냥 맨땅에 해딩일단 조금 해보려고 한다.

https://iamipro.tistory.com/461

 

데이터 모델링( 비즈니스 로직 tdd로 가기전)

설계라는것은 엄청난 것이라는 생각이 든다. 왜냐하면 창조적인 본능과 연계된 것으로 지구에서 눈에 보이는 것중에 인간만이 할 수 있기 때문이다. 여태까지는 도구를 쓴 부분만 생각했는데

iamipro.tistory.com

 

앞서 한 데이터 모델링을 기반으로

수강기능을 tdd로 해보려고 한다.

 

리포지토리 테스트는 끝났다~!

JPA참 편하다ㅎㅎ~

 

일단 tdd에서는 mock을 쓴다.

mock은 tdd의 단위테스트의 독립성을 보장해주기 위해서 한다고 한다.

 

https://cornswrold.tistory.com/369

 

Mockito 어노테이션(@Mock, @InjectMocks)

Mockito 관련 어노테이션 @RunWith(MockitoJunitRunner.class) Mockito에서 제공하는 목객체를 사용하기 하기위해 위와같은 어노테이션을 테스트클래스에 달아준다. @RunWith(MockitoJunitRunner.class) public class Test(){

cornswrold.tistory.com

@InjectMocks 는 @Mock 이붙은 객체를 @InjectMocks이 붙은 객체에 주입할수 있다고 한다.

 

즉 아래코드로 보면 EnrollmentService 에 CourseService를 주입한 것이다.

수강등록( EnrollmentService  )이라는 서비스에 앞서 수강서비스(CourseService)를 주입해서 사용하는 것이다.

 

 


import me.lms.tddstart.model.Course;
import me.lms.tddstart.model.dto.CourseDto;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class EnrollmentServiceTest {

    @Mock
    private CourseService courseService;

    @InjectMocks
    private EnrollmentService enrollmentService;

    @Test
    @DisplayName("수강신청 테스트")
    void enroll() {

        when(courseService.getCourseByCode(1)).thenReturn(new Course(1, "강의1" ,1));
        CourseDto result = enrollmentService.enroll(1, 1);

        assertNotNull(result);
        assertEquals(1, result.getCourseCode());
        assertEquals("강의1", result.getCourseName());

    }

}

그리고 등록테스트는 간단하게  

CourseService 에서 과목 하나를 가져오면서 과목객체를 생성한다.

CourseDto객체를 만들어서 수강신청 서비스에 등록한다

 

이로서 간단한 수강신청 등록 tdd 완성이다.

 

좀더 공부할 거리를 생각해보자~!

 

아래 보니 모키토를 좀더 상세히 설명해주즌 사이트가 있다.

https://doyoung.tistory.com/12

 

Junit5 에서 Mockito 사용하기

아래의 글을 작성하면서 Mockito 에 대해서 궁금해져서 공부를 해보았다. Junit5 시작 ​ What is JUnit 5? JUnit 5 Société Générale Use, Contribute and Attract: learn about Société Générale's open source strategy. junit.org j

doyoung.tistory.com

 

tdd는 처음에 실패하는 케이스를 생각해보고...

실패하지 않게끔 하는게 리팩토링하는게 궁극의 목적이라고 알고 있다...

 

일단 그렇다면 기본적인 등록까지는 

데이터 모델링을 제대로 했기에 제대로 되는거고...

 

그 다음은... dto 객체를 생성하면서

좀더 복잡한 tdd... 동시성 테스트... 같은것을 해보자~!

LIST