TDD는 Test-Driven Development(테스트 주도 개발)을 말하는데 말그대로 코드를 테스트 하는 것
테스트로 사용하는 프레임워크는 Junit, Spring test
1. Junit은 단위테스트로 주로 사용
2. Spring test는 애플리케이션 통합테스트를 하는 용도라고 한다.
사실 대략적으로만 이렇게 알고 있어서 자주 써보면서 알아가야 될거같다. 스프링부트에선 비교적 간편했는데 스프링에서는 못 써봤다.
최프때 쓰려고 하다가 설정에서 꼬이고 계속 시간 뺐겨 가지고 쌤한테 물어봤는데 설정파일 얘기하시고 안 알려주시더라 설정파일 문제인건 알고 있었고 그 부분을 해결 못했던건데..ㅋㅋ
제대로 해결을 못해서 포기하고 이제서야 정리한다. src/main/java 경로가 아닌 src/test/java 패키지가 별도로 있는데 이곳이 테스트코드를 작성하는 곳이고 해당 하위 경로에 테스트 클래스를 만든다. 클래스명이 정해진 것은 아니지만 쉽게 알아 보는게 좋으니 테스트하는 클래스명에 Test를 붙였다.
public class DBConnectionTest2Test {
@Test
public void springJdbcConnectionTest() throws Exception {
ApplicationContext ac = new GenericXmlApplicationContext("file:src/main/webapp/WEB-INF/spring/**/root-context.xml");
DataSource ds = ac.getBean(DataSource.class);
Connection conn = ds.getConnection();
System.out.println("conn = " + conn);
assertTrue(conn != null);
}
}
이제 테스트할 메소드를 작성하면 되는데 메소드명은 알아서, 반환타입은 반드시 void로 하고 @Test 애너테이션을 붙여주고 혹시 모르니 pom.xml 파일에 JUnit dependency 추가되어 있는지 확인해보자. 당연히 돼 있긴 한데..
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
테스트 메서드 마지막 줄이 assertTrue인데 JUnit에서 제공되는 메서드이다. 테스트코드 예상 결과와 실제 결과를 비교해서 테스트의 성공/실패 여부를 검증하는 역할을 하고 저거 말고도 여러개있다. 이번 갠프에선 다양하게 써볼 예정
실행 후 성공하면 이렇게 나오고
실패하면 이렇게 나온다.(위의 테스트코드 assertTrue(conn != null) → assertTrue(conn == null)로 바꿔서 실패하도록 변경)
이번엔 스프링 테스트를 써볼건데 먼저 maven dependency 한가지 더 추가
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<scope>test</scope>
</dependency>
테스트 코드를 작성
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class DBConnectionTest2Test {
@Autowired
DataSource ds;
@Test
public void springJdbcConnectionTest() throws Exception{
Connection conn = ds.getConnection(); // 데이터베이스의 연결을 얻는다.
System.out.println("conn = " + conn);
assertTrue(conn != null); // 괄호 안의 조건식이 true면 테스트 성공, 아니면 실패
}
}
클래스에
1. @RunWith(SpringJUnit4ClassRunner.class)
2. @ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
애너테이션을 추가 했는데 역할은 간단하게
1 → 테스트시 스프링 빈을 주입받고 사용할 수 있도록 초기화 하는 역할
2 → 특정 컨텍스트 파일이나 설정파일을 사용하도록 지정한다
자세히 적을까 하다가 어차피 하는 역할은 알고 돌아가는 것만 파악하면 되니 간단히..
@Autowired로 DataSource를 주입해서 메소드에서 작성 안해도 되고 @ContextConfiguration로 AC 설정도 할필요가 없어져서 코드가 좀 단순해 졌다. 이러고 실행을 하면 실패가 나온다? 이유는 JUnit버전이 낮아서..4.12이상이어야 한댄다. pom파일에서 버전만 수정해보고 다시 실행 했는데 잘 나온다.