6. AOP
6장 AOP
6.1. 트랜잭션 코드의 분리
6.1.1. 메서드 분리
fun upgradeLevels() {
val status = transactionManager.getTransaction(DefaultTransactionDefinition())
try {
val users = userDao.getAll()
for (user in users) {
if (canUpgradeLevel(user)) {
upgradeLevel(user)
}
}
transactionManager.commit(status)
} catch (e: Exception) {
transactionManager.rollback(status)
throw e
}
}6.1.2. DI를 이용한 클래스의 분리
UserServiceImpl – 순수 비즈니스 로직
UserServiceTx – 트랜잭션 전담 클래스
DI 설정의 의미
트랜잭션 분리 후 테스트 수정
트랜잭션 경계설정 코드 분리의 장점
6.2. 고립된 단위 테스트
6.2.1. 복잡한 의존관계 속의 테스트
6.2.2. 6.2 고립된 단위 테스트
요약
6.2.1 복잡한 의존관계 속의 테스트
6.2.2 테스트 대상 오브젝트 고립시키기
기존 방식 (DB 의존 테스트)
고립된 테스트 구조
MockUserDao 구현
검증 코드
테스트 성능 비교
6.2.3. 단위 테스트와 통합 테스트
6.2.4 목 프레임워크 – Mockito
Mockito 기본 사용법
MailSender 검증
ArgumentCaptor 사용 예시
Mockito가 해주는 일
Last updated