2021-11-07

1107 JUnit 테스트시의 의문점 해결

 JUnit으로 스레드풀테스트를 돌렸을때. join()을 걸어주지않았더니 바로 테스트가 종료되는 점 이 이상하다고 생각했다.

메인스레드가 종료되어도 다른작업스레드가 남아있으면 JVM이 종료되지 않는것이 보통아닌가? 그런데 왜 메인스레드가 이걸 기다려줘야 하지? 하고 의문이 들었다.

->실험1) 스프링이 만들어주는 생명주기와 관련이있다?

이를테면스프링빈에 의존하고있어서?? HelloService의 생명주기와 관련한것인가?

하지만 그렇다면 스레드 자체가 종료되는게 아니고 에러가 떴을거다. 

applicationRunner클래스를 이용하여 즉시실행으로 확인해본결과 역시 스프링 빈 문제는 아니었다.
join()메소드를 걸지 않아도 메소드는 잘 동작했고 예상했던 바와 같이 동시성문제도 발생하는 것을 확인할 수 있었다.


-> 실험2) JUnit프레임워크의 생명주기와 관련이있다?


마찬가지로 일반 main메소드로 돌렸을때도 join()걸지않아도 예상했던대로 출력되었다.


메인 스택이 종료되어도 남은 스레드가 있기때문에 jvm이 종료되지않고 출력되고있음을 확인할수있다.

이로서 JUnit의 생명주기와 join()메소드가 관련있음을 알게되었다!!

아마 JUnit은 테스트종료후에도 남은 스레드로 인해 메모리 누수가 생기는 것을 방지하기 위해 하위스레드들을 자동으로 데몬으로 셋팅하는.. 그런 작업이 있지않나 싶다.

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...