-
Spring(2) - Junit Test과 Spring TestBack-end/Spring 2021. 6. 24. 14:41반응형
Spring(1)에 이어서 설명하겠다.
이번에는 Java의 각 단위 클래스에 대해서 Test를 진행하려고 한다.
원래 대부분 사람들이 System.out.println 메소드를 이용하여 직접 값을 찍어보고 테스팅을 했다. 물론 나도 그렇다.
그러나 이것은 비효율적이다. 왜냐하면 보통 System.out.println 메소드로 확인하려면 DB와 연결하여 실행이 해야한다.
그러나 우리는 대부분 인터페이스만 생성하고 그것의 구현체를 만들어 테스트를 해야하기때문에 불가능하다. 이것을 보완하기 위해 Junit과 Spring Test를 사용한다.
솔직히 아직까지 큰 프로젝트가 없어서 이러한 테스트 진행을 하는 것이 익숙하지 않고 필요성을 못 느끼고 있다.
그래도 꼭 필요하다니깐 익혀놔야겠다. 사용 방법을 살펴보자.
1. Junit Library가져오기 (pom.xml)
두 가지 방법이 있다. 프로젝트 Build path Project에서 추가해주는 방법, pom.xml에 dependency추가하는 방법이다.
나는 dependency추가 방법을 선택했다.
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency>
이렇게 추가 시켜놓고 Maven Build를 하면 Library에 다음과 같이 추가 될 것이다.
위의 그림처럼 패키지들이 추가되었다. 그 중에서도 우리가 많이 사용할 클래스에 대해서 펼처놓았다.
일단 .class파일을 열어보면 각 메소드에 대한 설명들이 적혀있다. 우리가 주로 사용하는 메소드를 살펴보겠다.
org.junit.runner.RunWith : 테스트마다 객체를 생성하는데 그것을 싱글톤으로 생성해준다.
org.junit.Test : 테스트를 수행하는 메소드를 만든다.(각 테스트에 영향을 주지않는다.)
org.junit.After, org.junit.Before : 테스트 메소드가 시작하기 전, 후 무조건 실행되어진다.(매 호출마다 실행)
org.junit.AfterClass, org.junit.BeforeClass : 테스트 메소드가 시작하기 전, 후 무조건 실행되어진다.(한 번 실행)
org.junit.Ignore : 테스트를 수행 할 경우, 여러 테스트 메소드 중 실행 시키지 않고 싶은 메소드에 적용.
org.junit.Assert.assertEquals : 매개변수로 값을 두 개 받아 비교하여 같으면 테스트 성공 틀리면 fail을 띄워준다.
org.junit.Assert.assertSame : 객체가 같은 Ref를 가지고 있는지 확인.
*싱글톤 : 메모리의 효율성을 위해서 반복적인 메모리를 한 개의 객체만 메모리에 올려서 사용.
2. Junit Test 실행
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:config/beans.xml") public class HelloBeanSpring { @Autowired ApplicationContext context; @Test public void test2() { Hello hello = (Hello) context.getBean("hello"); Hello hello2 = (Hello) context.getBean("hello"); assertSame(hello, hello2); } @Test @Ignore public void test1() { Hello hello = (Hello) context.getBean("hello"); assertEquals("HelloSpring",hello.sayHello()); hello.print(); Printer printer = context.getBean("printer",Printer.class); assertEquals("HelloSpring",printer.toString()); } }
위에서 설명한 메소드를 Annotation을 이용하여 구현했다.
일단 ApplicationContext를 이용하여 컨테이너와 그 안에 Beans를 만들었다.
그리고 getBean을 이용하여 객체들이 잘 나오는지. 그리고 Value들이 맞는지 확인하는 코드이다.
이 글을 마치며...
솔직히 테스트를 처음 진행해보면 안되는 것들이 많이 있을 것이다. 나는 주로 버전이 낮아서 안되는 상황이 많이 발생하였다. 그래서 pom.xml에 dependency부분에서 버전을 고쳐주었다. 혹시 오류해결 방법들이 다 안 될 경우, 버전을 업그레이드 해보길 권장한다.
반응형'Back-end > Spring' 카테고리의 다른 글
Spring(6) - Mock, Mockito (0) 2021.08.25 Spring(5) - @Transactional (0) 2021.08.18 Spring(4) - 의존 관계 주입, DI(Dependency Injection) (0) 2021.07.11 Spring(3) - Bean등록하는 방법 (0) 2021.06.24 Spring(1) - Ioc와 DI컨테이너 작성 (0) 2021.06.24