상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
퇴직연금의 적립금과 투자 수익의 관계는 무엇인가요?
발렌타인데이에 실패하지 않는 식사 메뉴는 무엇인가요?
알루미늄의 항공 우주 산업에서의 역할은 어떤가요?
코딩 부트캠프에 대한 부정적인 시각은 무엇인가요?
코딩 부트캠프 수업에서 발생할 수 있는 윤리적인 문제는 무엇인가요?
직감이 우리의 안전을 지키는 데 어떤 역할을 할 수 있을까요?
작곡을 배우는 데 도움이 되는 책이나 온라인 강좌는 무엇인가요?
작곡에서의 예측 가능성과 예측 불가능성의 균형은 어떻게 맞추나요?
작곡의 영감을 주는 순간이나 장소는 무엇인가요?
작사에서 좋은 아이디어를 얻기 위한 이론적인 접근법은 무엇인가요?
카레의 각기 다른 조리 방법에는 어떤 것들이 있나요?
카레에 잘 어울리는 과일은 어떤 것들이 있나요?
Previous
Next
수정하기 - JUnit에서 @Timeout 애너테이션을 사용하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
JUnit에서 @Timeout 애너테이션은 특정 테스트 메서드나 테스트 클래스 전체에 대해 실행 시간 제한을 설정할 때 사용됩니다. 이 애너테이션을 통해 테스트가 지정한 시간 내에 완료되지 않으면 자동으로 실패하도록 할 수 있습니다. 즉, 테스트의 실행 시간이 너무 길어지는 것을 방지하여 테스트 스위트의 효율성을 높이고 무한 루프나 성능 문제를 조기에 발견할 수 있게 도와줍니다. 1. 기본 사용법 `@Timeout` 애너테이션은 JUnit Jupiter (JUnit 5)에서 제공하며, 시간 제한을 초 단위, 밀리초, 분 등으로 설정할 수 있습니다. 테스트 메서드 위에 직접 붙이거나 테스트 클래스 위에 붙여서 해당 클래스 내 모든 테스트에 제한 시간을 적용할 수도 있습니다. 예를 들어, 메서드 단위로 제한 시간을 2초로 설정하려면: ```java import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; import java.util.concurrent.TimeUnit; public class TimeoutExampleTest { @Test @Timeout(2) // 기본 단위는 초, 즉 2초 안에 테스트가 완료되어야 함 void testWithTimeout() throws InterruptedException { // 테스트 코드가 2초 이상 걸리면 실패 Thread.sleep(1500); // 1.5초 대기, 테스트 통과 } @Test @Timeout(value = 500, unit = TimeUnit.MILLISECONDS) // 500밀리초 안에 테스트 완료 void testWithTimeoutInMilliseconds() throws InterruptedException { Thread.sleep(600); // 0.6초, 테스트 실패 } } ``` 위 예시에서 첫 번째 테스트는 2초 제한을 주었고, 1.5초만에 끝나므로 성공합니다. 두 번째 테스트는 500ms 제한인데, 600ms 딜레이가 있어서 실패합니다. 2. 클래스 단위 사용 클래스 레벨에 @Timeout 애너테이션을 붙이면 해당 클래스의 모든 테스트 메서드에 동일한 제한 시간이 적용됩니다. ```java import org.junit.jupiter.api.Timeout; import org.junit.jupiter.api.Test; import java.util.concurrent.TimeUnit; @Timeout(value = 1, unit = TimeUnit.SECONDS) public class AllTestsTimeout { @Test void fastTest() throws InterruptedException { Thread.sleep(500); // 0.5초, 통과 } @Test void slowTest() throws InterruptedException { Thread.sleep(1500); // 1.5초, 실패 } } ``` 클래스에 1초 제한이 걸렸기 때문에, 1.5초 걸리는 테스트는 실패합니다. 3. 동작 방식과 주의점 - @Timeout은 실제로는 <a href='https://sangseek.com/sangseeks/내부적으로/ko'>내부적으로</a> 테스트 메서드를 별도의 스레드에서 실행시키고, 지정된 시간 안에 실행이 완료되지 않으면 `org.junit.jupiter.api.extension.TimeoutException`을 발생시킵니다. - 제한 시간이 초과되면 해당 테스트는 즉시 실패로 처리됩니다. - 기본 단위는 초(second)이며, `value`와 `unit` 속성 조합으로 세밀한 제어가 가능합니다. - 무한 루프나 오래 걸리는 작업 등 테스트가 멈추지 않는 경우 자동으로 강제 종료되지 않고, 테스트는 실패 상태가 됩니다. - `@Timeout`은 JUnit 4에서는 지원되지 않고, JUnit 5(Jupiter)에서만 지원되므로 JUnit 5를 사용하는 경우에만 적용 가능합니다. 4. 스레드 풀과 @Timeout - 만약 테스트 실행에 활성화된 스레드 풀이 있다면, @Timeout이 내부적으로 사용하는 스레드와 다른 스레드 풀이 혼합되어 있을 수 있으므로, 일부 상황에서는 타임아웃 감지가 예상과 다를 수 있습니다. - 특히 비동기 작업과 함께 사용할 때는 `@Timeout`으로는 부족하여, JUnit의 `assertTimeout()` 같은 메서드를 더 활용할 수도 있습니다. 5. 요약 - `@Timeout`은 테스트 실행 시간을 제한하는 애너테이션 (JUnit 5). - 시간 제한은 초가 기본이며 `value`와 `unit`으로 시간 단위 커스터마이즈 가능. - 메서드 단위 또는 클래스 단위에 적용 가능. - 제한 시간을 초과하면 테스트 실패 처리. - 무한루프 및 장시간 실행 테스트 검출에 유용. --- 위 내용을 참고하여 JUnit 테스트에 `@Timeout`을 적절히 활용하면, 테스트가 예상치 않게 오래 걸리는 문제를 쉽게 관리할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기