2012-10-30 8 views
4

:단위 테스트 스프링 배치 작업 접근이 스프링 배치 작업에 아래의 시나리오를 테스트하는 것입니다 무엇

1) 스프링 배치 작업의 단계에서 실행되는 독립적 인 태스크 릿.

2) 작업 표가있는 일부 단계에서 itemreader, itemprocessor, itemwriters가있는 단계가있는 여러 단계로 구성된 작업.

3) 항목 판독기로 입력 된 쿼리가 여러 테이블의 조인을 갖는 매우 복잡한 sql 쿼리 인 itemreader -이 시나리오에서는 사용 된 모든 테이블을 비우고 테스트를 위해 더미 데이터로 채우는 것을 허용하지 않습니다. 즉, 테스트를 위해 테이블을 비울 수없는 실제 시나리오가있을 수 있습니다. 이 경우 접근법은 무엇이되어야합니까?

이 포럼에서 취할 수있는 접근법에 대해 조금이라도 도움이된다면 다른 작업 시나리오로 봄 배치 작업을 테스트하는 예제가 들어있는 예제 제품군을 준비하고 싶습니다.

각각의 방법 : 그것은 '단위'등 데이터베이스 나 등 내가 가진 접근 파일과 같은 외부 자원과 너무 많은 상호 작용이 순수하기 때문에, 스프링 배치 작업을 테스트하기 매우 어렵다

+0

일반적으로 데이터베이스 또는 스프링 배치에 대해 효과적으로 테스트하는 테스트를 작성하지 않도록하십시오.즉, 아래 기술 (예 : HSQLDB 사용)을 사용하여 데이터베이스와 테이블을 시뮬레이션 할 수 있습니다. 이것은 메모리 데이터베이스를 사용하여 수행 할 수 있으므로 실제 데이터베이스를 사용할 때보 다 몇 배 더 빠릅니다. – Fortyrunner

답변

6

두 가지 수준이있다 태스크 렛에서 정상적으로 단위 테스트를 받았다면, JUnit 테스트에서 일반적인 mock 또는 스텁을 사용하여 메소드를 직접 호출합니다.

두 번째로 JUnit 테스트에서 필요한 인프라를 모두 직접 배치하여 main 메소드를 직접 호출하여 배치를 실행합니다. 내 일괄 작업의 경우 데이터베이스와 일부 입력 파일이 필요합니다. 내 JUnit 테스트는 그 테스트에 필요한 모든 파일을 데이터베이스 (HSQLDB 형식으로 저장된 MySQL 데이터베이스 복사본이 있음)와 함께 임시 디렉토리 (보통 maven을 사용하므로 대개 target/it)로 복사합니다. 그런 다음 올바른 매개 변수를 사용하여 Main.main()을 직접 호출하고 일괄 처리를 실행 한 다음 결과를 확인하고 올바른 파일이 생성되었는지, 데이터베이스가 올바르게 변경되었는지 확인하십시오.

다음과 같은 몇 가지 장점이 있습니다. 일하는 방식. 나는 전체 패키지를 테스트 할 때마다 구축 할 필요가 없기 때문에

  1. 나는, 그래서 디버깅주기를 단축, 이클립스에서 테스트를 실행할 수 있습니다.
  2. 빌드에 포함시키기가 쉽기 때문에, 나는 그들을 maven의 failsafe 플러그인에 포함하기 만하면됩니다. 경고의 부부와 함께

:

당신은 보안 관리자 내에서 main 메소드를 실행해야합니다. 당신의 main이 System.exit()을 호출한다면, 당신은 JVM을 멈추기를 원하지 않을 것이다. SecurityManager의 예는 org.junit.tests.running.core.MainRunner을 참조하십시오. 이것은 같은 호출됩니다 위의 사용

Integer exitValue = new MainRunner().runWithCheckForSystemExit(new Runnable() { 
    public void run() { 
    Main.main(new String[] {}); 
    } 
}); 

, 당신은 배치뿐만 아니라 실패 조건의 시험을 허용, 실패에 대한 올바른 값을 System.exit()를 호출 주장 할 수 있습니다.

둘째, JUnit 테스트에서 많은 설정을 할 수 있지만 모든 작업을 수행 할 수는 없습니다. 예를 들어 FTP 서버가 필요한 경우 일반적으로 JUnit이 아닌 maven에서 시작합니다. failsafe 플러그인이 실행됩니다. 이것은 때로는 조금 비웃을 수 있습니다.

+1

자세한 내용을 보내 주셔서 감사합니다 ... http://blogs.justenougharchitecture.com/?p=124 및 http://keyholesoftware.wordpress.com/2012/02/23/spring-batch-unit 테스트 및 모키토 / – Nik

관련 문제