- 테이블 설계 옵션
- 카카오 User 를 위한 테이블 (ex. KakaoUser) 을 하나 더 만든다.
- 장점: 결합도가 낮아짐
- 성격이 다른 유저 별로 분리 → 차후 각 테이블의 변화에 서로 영향을 주지 않음
- 예) 카카오 사용자들만 profile_image 컬럼 추가해서 사용 가능
- 단점: 구현 난이도가 올라감
- 예) 관심상품 등록 시, 회원별로 다른 테이블을 참조해야 함
- 일반 회원: User - Product
- 카카오 회원: KakaoUser - Product
- 예) 관심상품 등록 시, 회원별로 다른 테이블을 참조해야 함
- 장점: 결합도가 낮아짐
- 기존 회원 (User) 테이블에 카카오 User 추가
- 장점: 구현이 단순해짐
- 단점: 결합도가 높아짐
- 폼 로그인을 통해 카카오 로그인 사용자의 username, password 를 입력해서 로그인한다면??
- 카카오 User 를 위한 테이블 (ex. KakaoUser) 을 하나 더 만든다.
단위 테스트
버그는 발견 시간이 늦어질수록 비용이 급격하게 커진다.
단위 테스트는 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지를 검사하는 테스트 기법
단위 테스트는 빠르게 작성할 수 있고 문제 발생 시 어느 부분이 잘 못 되었는지를 빠르고 정확하게 확인할 수 있다는 장점이 있다.
Given - When - Then : Test Code 스타일을 표현하는 방식
Given
- 테스트 하고자하는 대상을 실제로 실행하기 전에 테스트에 필요한 값(상태)을 미리 선언해 둡니다.
When
- 테스트 하고자하는 대상을 실제로 실행 시킵니다.
Then
- 어떤 특정한 행동(테스트 대상 실행) 때문에 발생할거라고 예상되는 결과에 대해 예측하고 맞는지 확인합니다.
↓예시코드
더보기
class CalculatorTest {
Calculator calculator;
@BeforeEach
void setUp() {
calculator = new Calculator();
}
@Test
@DisplayName("계산기 연산 성공 테스트")
void test1() {
// given
int num1 = 5;
String op = "/";
int num2 = 2;
// when
Double result = calculator.operate(num1, op, num2);
// then
assertNotNull(result);
assertEquals(2.5, result);
}
@Test
@DisplayName("계산기 연산 실패 테스트 : 분모가 0일 경우")
void test1_1() {
// given
int num1 = 5;
String op = "/";
int num2 = 0;
// when
Double result = calculator.operate(num1, op, num2);
// then
assertNull(result);
}
@Test
@DisplayName("계산기 연산 실패 테스트 : 연산자가 잘못됐을 경우")
void test1_2() {
// given
int num1 = 5;
String op = "?";
int num2 = 2;
// when - then
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> calculator.operate(5, "?", 2));
assertEquals("잘못된 연산자입니다.", exception.getMessage());
}
}
JUnit 5 User Guide
https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations
Mockito
프로젝트에서 service와 같은 기능을 테스트할 때, 서비스 내에서 필요한 repository나 entity 등과 같이 유기적으로 섞여있는 기능 중에서 service만 독립적으로 테스트하고 싶을 때 사용할 수 있는 가짜 객체다.
예시) service를 구현하기 위해 필요한 repository들을 이름만 같게 생성해서, 실제 데이터베이스 작동은 하지 않게 만든 것이다.
@ExtendWith(MockitoExtension.class) // @Mock 사용을 위해 설정합니다.
class ProductServiceTest {
@Mock
ProductRepository productRepository;
@Mock
FolderRepository folderRepository;
@Mock
ProductFolderRepository productFolderRepository;
위와 같이 mock 생성만 하면 사용 케이스를 제대로 작성하지 않았기 때문에 에러가 발생한다.