TIL

(2024-06-14) 개인과제 aop적용 dto 테스트

o_coding 2024. 6. 17. 16:07
@Aspect
@Component
@Slf4j(topic="Log AOP")
public class LogAop {
@Pointcut("execution(* com.example.newspeed.controller.CommentController.*(..))")
private void comment(){}
@Pointcut("execution(* com.example.newspeed.controller.ContentController.*(..))")
private void content(){}
@Pointcut("execution(* com.example.newspeed.controller.LikeController.*(..))")
private void like(){}

@Pointcut("execution(* com.example.newspeed.controller.ProfileController.*(..))")
private void profile(){}

@Pointcut("execution(* com.example.newspeed.controller.UserController.*(..))")
private void user(){}
@Around("comment()||content()||like()||profile()||user()")
public Object logHttpRequest(ProceedingJoinPoint joinPoint) throws Throwable {
//HTTP 요청 정보 가져오기
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();

//Http 메소드와 URL 로깅
String method = request.getMethod();
String url = request.getRequestURL().toString();
log.info("HTTP Method : " + method);
log.info("Request URL : " + url);

Object result = joinPoint.proceed();
return result;
}
}

 

모든 컨트롤러가 실행될 때 메소드명과 url이 나오는 로그를 찍도록 aop를 설정했다.

@Around를 사용해서 핵심기능 수행전과후에 로그가 출력되도록 했다.

@Test
public void userIdSizeTest(){
//given
SignUpRequestDto dto = new SignUpRequestDto();
dto.setUserId("abcx");
dto.setPassword("Abcdca124411");
dto.setUsername("ValidUser");
dto.setEmail("invalid@email");
dto.setIntro("This is a valid intro.");

//when
Set<ConstraintViolation<SignUpRequestDto>> violations = validator.validate(dto);
ConstraintViolation<SignUpRequestDto> violation = violations.iterator().next();

//then
assertEquals("10에서20자 이내로 만 가능합니다.", violation.getMessage());
}

@Test
public void passwordTest(){
//given
SignUpRequestDto dto = new SignUpRequestDto();
dto.setUserId("abcxaw21313");
dto.setPassword("Abcdca124411");
dto.setUsername("ValidUser");
dto.setEmail("invalid@email");
dto.setIntro("This is a valid intro.");

//when
Set<ConstraintViolation<SignUpRequestDto>> violations = validator.validate(dto);
ConstraintViolation<SignUpRequestDto> violation = violations.iterator().next();

//then
assertEquals("대소문자 포함 영문, 숫자, 특수문자를 포함하여 10자 이상 입력해주세요.", violation.getMessage());
}
@Test
public void emailTest(){
//given
SignUpRequestDto dto = new SignUpRequestDto();
dto.setUserId("abcxaw21313");
dto.setPassword("Abcdca124411@");
dto.setUsername("ValidUser");
dto.setEmail("invalidemail");
dto.setIntro("This is a valid intro.");
//when
Set<ConstraintViolation<SignUpRequestDto>> violations = validator.validate(dto);
ConstraintViolation<SignUpRequestDto> violation = violations.iterator().next();
//then
assertEquals("이메일 형식이 아닙니다.",violation.getMessage());

}

public void introTest(){
//given
SignUpRequestDto dto = new SignUpRequestDto();
dto.setUserId("abcxaw21313");
dto.setPassword("Abcdca124411@");
dto.setUsername("ValidUser");
dto.setEmail("invalid@email");
dto.setIntro("x".repeat(256));

//when
Set<ConstraintViolation<SignUpRequestDto>> violations = validator.validate(dto);
ConstraintViolation<SignUpRequestDto> violation = violations.iterator().next();

//then
assertEquals("255자 이내로만 작성 가능합니다.", violation.getMessage());
}

 

validation 테스트를 했는대 valdiation에 걸렸을 때 나오는 메시지가 올바른지 assertEquals를 통해 비교하는 테스트를 했다.