반응형
타진
개발 그라운드
타진
전체 방문자
오늘
어제
  • 분류 전체보기 (136)
    • 프로그래밍 (65)
      • Java (28)
      • Android (1)
      • Web (19)
      • Web-Spring (12)
      • R (5)
      • Angular (0)
    • 운영체제 (17)
      • Linux (14)
      • Docker(vmware) (3)
    • 클라우드 (4)
      • aws (0)
      • aws_handson (4)
    • 개발문제해결 (25)
      • Exception (12)
      • 알고리즘 문제풀이 (13)
    • 그 외 개발관련 (23)
    • 일상 (1)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • github actions
  • handson
  • docker ps
  • 빠른 시작 끄기
  • github
  • 일어키보드
  • stackset
  • wsl2
  • jdk14
  • transit gateway peering
  • GIT
  • 4700u
  • angular cli
  • 정올알고리즘 정올 알고리즘
  • 라이젠
  • transit_gateway
  • vmmem
  • alt tab
  • AWS
  • docker desktop
  • docker
  • Github CLI
  • cfn
  • wsl_update_x64
  • 빠른 시작 켜기
  • chromium edge
  • ubuntu terminal
  • 문법 체크
  • 크로미움 엣지
  • 키보드매핑

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
타진

개발 그라운드

스프링 프레임워크 - Junit Test
프로그래밍/Web-Spring

스프링 프레임워크 - Junit Test

2018. 2. 4. 22:37
반응형


개발 상황에서 테스트의 중요성을 부인할 사람은 없을 것이라 생각합니다.


그것도 처음부터 자잘하게 꾸준히 테스트하는 게 나중에 생각해보면 시간을 많이 절약해주죠.


이 포스트에서는 간단하게 Junit에 대해 다룹니다.


Junit은 클래스의 제어권한을 넘겨받아 어플리케이션의 흐름을 제어하는 프레임워크입니다. 


테스트에서 Junit 프레임워크가 요구하는 조건은 두가지입니다.


메소드가 public이로 사용되어야하고, @Test 라는 어노테이션이 붙어야합니다.


Junit은 어노테이션을 적극적으로 활용하죠.





1번의 @Runwith은 Junit의 기능을 확장해서 스프링과 관련된 기능을 사용하게끔 해주는 어노테이션입니다.

모든 클래스는 클래스의 작업을 실행해주는 main 클래스가 있습니다. Junit의 경우 그 main 클래스를 러너 클래스라고 부르는데

테스트 코드를 이 러너클래스에서 돌려서 테스트를 진행하게 됩니다. 

이 때 테스트 도중 스프링과 관련된 기능의 확장, 어플리케이션 컨텍스트 생성 관리 등의 작업을 도와줍니다.


그 아래 @ContextConfiguration은 테스트 클래스가 자동으로 만들고 운영하는 어플리케이션 컨텍스트의 위치 주소입니다.

저 주소에 애플리케이션 컨텍스트의 설정파일을 만들게 됩니다. 

이 정보는 생략할 수도 있습니다. 생략 시에는 테스트 클래스가 속한 패키지 내부에 아래와 같이 자동으로 생성/조회 합니다.


jTest-context.xml

jtest-context.xml



이렇게 관리되어 만들어진 어플리케이션 컨텍스트 값은 2번의 @Autowired 어노테이션이 붙은 ApplicationContext 클래스에 자동으로 주입됩니다.

테스트 프레임워크에서 @Autowired가 붙은 인스턴스가 있으면 탐지 후 주입해줍니다.


어노테이션이 없으면


ApplicationContext context = new ApplicationContext("applicationContext.xml");

이렇게 적어줘야할 코드를 자동으로 주입해 주는 것입니다.


어플리케이션 컨텍스트는 빈이 아니지만, 스프링 어플리케이션 컨텍스트는 초기화 할 때 자기자신도 빈으로 등록합니다. 

따라서 어플리케이션 컨텍스트에는 ApplicationContext 타입의 빈이 존재하는 것입니다.


이런 어노테이션 방식으로 어플리케이션 컨텍스트를 사용한다면, 테스트 클래스가 몇개이든 단 하나의 설정파일을 공유하고

사용하게 됩니다. 때문에 효율성 측면에서도 좋습니다.


3번의 @Before는 @Test 이전에 실행되는 메소드입니다.

주요 테스트를 하기 전에 한번 거쳐가는 메소드이죠. 같은 원리로 @After는 @Test 이후에 실행되는 메소드입니다.


4번은 테스트 Junit은 @Test가 붙은 메소드를 실행할 때마다 테스트 오브젝트를 하나씩 만들어냅니다.

저 예제코드에서는 @Test 가 두개인데, 그러면 테스트 오브젝트가 두개 만들어지게 됩니다.


즉, 예제코드에서 테스트가 이루어진다면


@Before -> 첫번째 @Test -> @After ->

@Before -> 두번째 @Test -> @After 


이런 식으로 이루어지게 되겠죠.



만약 테스트 중에 익셉션이 뜨게 되면 어떻게 될까요? 테스트는 돌발상황을 감지하고 중단되고 죽어버릴 것입니다.

우리가 당연히 에러가 날 상황을 예상하고 테스트 하더라도, 죽어버리겠죠.


이런 경우를 생각하기 위해


두번째 예제코드의 @Test에서는 (expected=...) 형식으로 익셉션 클래스를 정의하고 있습니다.

예제코드에서는 널 익셉션이 정의되었는데 이런 경우 널 익셉션이면 죽지 않고 테스트가 진행됩니다.


반응형
저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 > Web-Spring' 카테고리의 다른 글

JDBC 트랜잭션과 트랜잭션 추상화 (Transaction, Abstraction of Transaction)  (0) 2018.02.10
Spring - 파일 업로드 하기  (1) 2017.11.27
Spring에서 mybatis 사용법  (0) 2017.11.25
    '프로그래밍/Web-Spring' 카테고리의 다른 글
    • SpringFramework(스프링) - 팩토리 빈(FactoryBean)
    • JDBC 트랜잭션과 트랜잭션 추상화 (Transaction, Abstraction of Transaction)
    • Spring - 파일 업로드 하기
    • Spring에서 mybatis 사용법
    타진
    타진
    vulnerable1324@gmail.com

    티스토리툴바