JUnit4 & Spring-Test

1. JUnit을 사용한 DI 클래스 테스트

JUnit의 개요

  • Java에서 독립된 단위테스트를 지원해주는 프레임워크
  • 단위 테스트를 정형화시켜 쉽게 해준다

JUnit의 특징

  • 단정(assert) 메서드로 테스트 케이스의 수행 결과를 판별함

​ ex) assertEquals(예상 값, 실제 값)

  • JUnit4부터는 테스트를 지원하는 어노테이션을 제공

​ ex) @Test, @Before, @After

  • 각 @Test 메서드가 호출할 때 마다 새로운 인스턴스를 생성하여 독립적인 테스트가 이루어지도록 함

JUnit에서 지원하는 주요 어노테이션

  • @Test
    • @Test가 선언된 메서드는 테스트를 수행하는 메서드가 됨
    • JUnit은 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행됨을 원칙으로 하므로 @Test마다 객체를 생성함
  • @Ignore
    • @Ignore가 선언된 메서드는 테스트를 실행하지 않게 함
  • @Before
    • @Before가 선언된 메서드는 @Test 메서드가 실행되기 전에 받드시 실행됨
    • @Test 메서드에서 공통으로 사용하는 코드를 @Before 메서드에 선언하여 사용
  • @After
    • @After가 선언된 메서드는 @Test 메서드가 실행된 후 실행됨
  • @BeforeClass
    • BeforeClass 어노테이션은 @Test 메서드보다 먼저 한 번만 수행되어야 할 경우 사용
  • @AfterClass
    • @AfterClass 어노테이션은 @Test 메서드보다 나중에 한 번만 수행되어야 할 경우 사용

테스트 결과를 확인하는 단정(assert) 메서드

  • assertEquals(a, b) - 객체 a와 b가 일치함을 확인
  • assertArrayEquals(a, b) - 배열 a와 b가 일치함을 확인
  • assertSame(a, b) - 객체 a와 b의 레퍼런스가 동일한지 확인( == 연산자와 같음)
  • assertTrue(a) - 조건 a가 참인지 확인
  • assertNotNull(a) - 객체 a가 null이 아님을 확인

Spring-Test에서 테스트를 지원하는 어노테이션

  • @RunWith(SpringJUnit4ClassRunner.class)
    • JUnit 프레임워크의 테스트 실행 방법을 확장할 때 사용
    • SpringJUnit4ClassRunner라는 클래스를 지정해주면 JUnit이 테스트를 진행하는 중에 ApplicationContext를 만들고 관리하는 작업을 진행해줌
    • @RunWith는 각각의 테스트 별로 객체가 생성되더라도 싱글톤의 ApplicationContext를 보장함
  • @ContextConfiguration
    • 스프링 빈 설정 파일의 위치를 지정할 때 사용
  • @Autowired
    • 스프링DI에서 사용되는 특별한 어노테이션
    • 해당 변수에 자동으로 빈을 매핑
    • 스프링 빈 설정 파일을 읽기 위해 굳이 GenericXmlApplicationContext를 사용할 필요가 없음