inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링과 JPA 기반 웹 애플리케이션 개발

Study Event Test 하는 법 문의드립니다.

339

parkht

작성한 질문수 20

0

안녕하세요. 백기선 강사님 강의 참고하여 직접 코드 짜면서 공부하는 도 중 막히는 부분이 생겨 질문 남기게 되었습니다.

Study관련한  Event에 대해서 테스트를 해보려고 하는데요.

@Transactional
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
@AutoConfigureMockMvc
public class StudyNotificationTest {
	
	@Autowired MockMvc mockMvc;
	@Autowired ApplicationEventPublisher applicationEventPulbisher;
	@Autowired NotificationService notificationService;
	@Autowired NotificationRepository notificationRepository;
	@Autowired AccountService accountService;
	@Autowired AccountRepository accountRepository;
	@Autowired StudyService studyService;
	@Autowired StudyRepository studyRepository;
	@Autowired ZoneService zoneService;
	@Autowired TagService tagService;
	@Autowired TagRepository tagRepository;
	@Autowired ThreadPoolTaskExecutor executor;
	
	@BeforeEach
	public void boforeEach() {
		SignUpForm signUpForm = SignUpForm.builder()
				.email("test@test.com")
				.nickname("test")
				.password("12341234")
				.build();
		Account account = accountService.signUp(signUpForm);
		account.setStudyCreatedByEmail(true);
		account.setStudyCreatedByWeb(true);
		account.setStudyUpdatedByEmail(true);
		account.setStudyUpdatedByWeb(true);
		
		TagForm tagForm = TagForm.builder().title("test").build();
		Zone zone = zoneService.findAll().get(0);
		Tag tag = tagService.save(tagForm);
		accountService.addTag(account, tag);
		accountService.addZone(account, zone);
		
		StudyForm studyForm = StudyForm.builder()
				.fullDescription("test")
				.path("test")
				.shortDescription("test")
				.title("test").build();
		Study study = studyService.save(studyForm, account);
		studyService.addTag(study, tag);
		studyService.addZone(study, zone);	
	}
	
	@AfterEach
	public void afterEach() {
		accountRepository.deleteAll();
		studyRepository.deleteAll();
		tagRepository.deleteAll();
		notificationRepository.deleteAll();
	}
	
	@DisplayName("Study Created Event")
	@Test
	public void studyCreateEventTest() throws Exception {
		Study study = studyService.getOnlyStudyByPath("test");
		Account account = accountService.findByNickname("test");
		applicationEventPulbisher.publishEvent(new StudyCreatedEvent(study));
		
		executor.getThreadPoolExecutor().awaitTermination(1, TimeUnit.SECONDS);
		
		List<Notification> notifications = notificationService.findByNotificationType(NotificationType.STUDY_CREATED);
		assertTrue(notifications.stream().map(Notification::getAccount).collect(Collectors.toList()).contains(account));
	}

}

위와 같이 코드를 작성했는데, EventListener에서 Study를 조회하는 부분에서 ID에 해당하는 Study가 없다는 오류와 함께 테스트가 진행되지 않았습니다..

(executor 부분은 async 테스트 하는 방법 찾아보던 도중 발견한 코드입니다.)

해당 이벤트를 테스트할 수 있는 방법 문의드립니다.

감사합니다.  

JPA spring thymeleaf java spring-boot

답변 1

0

백기선

AsyncConfig를 테스트 사용시 비활성화 상태로 만들면 테스트시 비동기 리스너를 사용하지 않을테니 좀 더 테스트가 편해질 수 있습니다. AsyncConfig를 비활성화 시키는 방법은 스프링 프로파일을 사용해 해당 설정이 테스트 프로파일이 아닌 경우에만 사용하도록 설정하고 테스트 코드는 테스트 프로파일로 실행하도록 설정하면 그렇게 만들 수 있습니다.

Study 개설하는 로직에 대해서 궁금점이 있습니다.

0

55

1

앱 재시작 후 회원가입

0

103

1

app.host 관련 질문이 있습니다

0

97

1

강의 버전 정보

0

125

1

event, study 참조

0

219

2

비밀번호 변경 로직 질문있습니다.

0

135

1

프로필 수정 처리 merge 질문입니다.

0

107

1

회원가입 성공 후 redirect이동시 권한 질문

0

492

3

HtmlEmailService 개발하다 생긴 의문입니다

0

250

2

postgreSql 연결하여 JPA 를 통해 테이블 생성시 ZONE 테이블 생성에서 에러가 납니다

0

430

2

수업질문 [긴급] 로그인안되는 문제 말씀해주시는 부분 반영해서 최종 질문드립니다

0

260

2

[긴급-재업로드]수업질문 로그인 안 되는 문제

0

235

1

[긴급] 로그인해도 네비게이션 바가 안 바뀌고 있습니다!! 로그인이 안 됩니다 도와주세요

0

277

1

cropper 오류 문제로 질문드립니다..

0

288

2

authentication관련 질문...

0

495

2

모임참가 취소 할때 로직 질문

0

350

3

안녕하세요 기선님 질문이있습니다..

0

229

1

HTML코드 및 강의 중간자료들

0

679

3

springSecurity

0

522

2

버전 질문입니다.

0

302

1

부트스트랩, css

0

353

2

영속성 컨텍스트 질문

0

248

2

다시 강의를 보니 드는생각..

0

352

2

5:50에 나오는 HTML코드는 어디서 찾을 수 있나여?

0

313

1