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와 그 이후 작업을 위해서 세팅

+ Recent posts