Spring Test 코드 작성기
- Boostcourse 프로젝트 작성 시
데이터가 제대로 출력되는지 확인하기 위해서 서버를 올렸다 내렸다 하기 귀찮아서 테스트 클래스를 따로 만듦
요약
1. Pom.xml에 spring-test, junit 설정
2. DB 설정
3. Test 코드 작성
- 필요 라이브러리 (Pom.xml)
spring-test
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
junit
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
- DB 설정
여기서는 개인의 DB 설정 방법에 따라 다름
(xml에 DB설정 또는 java class에 DB설정)
- 내 프로젝트 구성
- 특이사항이라면 xml로 DB 설정이 xml에 설정되어 있는 것이 아니라 Java class에 DB 설정
ApplicationContext.class
@Configuration
@ComponentScan(basePackages = { "kr.or.seok.naver.dao", "kr.or.seok.naver.service" })
@Import({ DBConfig.class })
public class ApplicationConfig {
}
- application.properties 파일에 DB 설정 정보를 담아 놓고 @PropertySource 어노테이션으로 불러다가 사용
DBConfig.class
@Configuration
@PropertySource({"classpath:application.properties"})
@EnableTransactionManagement
public class DBConfig implements TransactionManagementConfigurer {
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
/**
* DataSource 설정
* @return
*/
@Bean
public DataSource datasource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
/**
* Transaction처리 기능을 사용하기위한 설정
*
* @return
*/
@Bean
public PlatformTransactionManager transactionManager() {
// DB 설정을 커스터마이징 하기 위한 메서드
return new DataSourceTransactionManager(datasource());
}
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return transactionManager();
}
}
- TestCode 작성
기존 BoostCourse에서 배운 Test 방법
하나의 기능만 테스트를 하기엔 별 문제 없으나 하나의 클래스에서 여러 테스트를 하기 위해서는 ApplicationContext를 계속 써줘야함
public class TestDaoPromotion {
/**
* 프로모션(Promotion) 출력
*/
@Test
// @Ignore
public void testProduct() {
// DB 설정
ApplicationContext ac = new AnnotationConfigApplicationContext(ApplicationConfig.class);
PromotionDao promotionDao = ac.getBean(PromotionDao.class);
List<Promotion> promotions = promotionDao.getPromotions();
for (Promotion promotion : promotions) {
System.out.println(promotion);
}
}
}
그래서 수정해봄
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ApplicationConfig.class, DBConfig.class})
@WebAppConfiguration
public class TestDaoPromotion {
@Autowired
PromotionDao promotionDao;
/**
* 프로모션(Promotion) 출력
*/
@Test
public void testProduct() {
List<Promotion> promotions = promotionDao.getPromotions();
for (Promotion promotion : promotions) {
System.out.println(promotion);
}
}
}
결론
- promotion, category 에서는 필요한 메서드가 하나 뿐이라 테스트코드가 의미 없어보일 수도 있으나
product와 그 이후 작업을 위해서 세팅
'Edu > BoostCourse - Web' 카테고리의 다른 글
[BoostCourse] JavaScript - 객체 리터럴 패턴 (0) | 2018.09.13 |
---|---|
[BoostCourse] JavaScript - 배열의 함수형 메서드 (0) | 2018.09.12 |
[Connect] 인터뷰 (0) | 2018.09.10 |
[BoostCourse] JavaScript - .replace() 문자열 바꾸기 (Feat. 정규표현식) (0) | 2018.09.03 |
[BoostCourse] Spring Annotation - @Controller vs @RestController (4) | 2018.09.01 |