2016-09-14 16 views
1

JUnit을 사용하여 Java 배치 작업을 테스트 할 수 있습니까? Junit이 로컬에서 실행되고 Java 일괄 작업이 서버에서 실행되기 때문에 JUnit 테스트 케이스에서 작업을 시작하는 방법 (JobOperator 클래스를 사용하여 시도한 방법)을 알지 못합니다.JSR : 352 단위 테스트 자바 배치 코드?

JUnit이 올바른 도구가 아닌 경우 어떻게 Java 테스트 일괄 처리 코드를 테스트 할 수 있습니까? 나는이 실행 JSR 352의 IBM의 구현을 사용하여 사용하고

은 자유

답변

2

JUnit을 먼저 전혀 자동화테스트 모니터 프레임 워크입니다했다. 의미 : 모든 종류의 @Test 메소드를 구동하는 데 사용할 수 있습니다.

개념적 관점에서 unit tests의 정의는 매우 모호합니다. 위키 피 디아를 따를 경우 "테스트를 위해하는 모든 일"이 단위 테스트로 간주 될 수 있습니다. 그런 관점에서 볼 때 배치 프레임 워크에서 실행되는 배치 코드를 "단위 테스트"할 수 있습니다.

하지만 대부분의 사람들은 "참"하고 유용한 "단위 테스트는 이 아니며은 외부 물질이 필요하다고 생각합니다. 이러한 테스트는 빌드 타임에 "로컬"로 실행할 수 있습니다. "당신은"통합 "을 구동하기 위해 JUnit을 사용할 수 있습니다

  1. 나 : 마음에 유지 서버, 파일 시스템, 네트워킹, 대한 필요 ...

    , 난 당신이 작업 할 수 있습니다 두 가지가 있다고 생각하지 않습니다 기능 테스트 ". 의미 : "완전한 것"을 수행하는 테스트 스위트를 정의 할 수 있습니다. 일괄 처리를 정의하고 마지막에 예상 결과를 확인하도록 처리 할 수 ​​있습니다. 마찬가지로, 통합 엔드 - 투 - 엔드 흐름이 예상대로 작동하는지 테스트합니다.

  2. "정상적인"JUnit unit-testing을 조사합니다. 의미 : 코드에서 일괄 프레임 워크와 "관련 없음"(즉, POJO를주의 깊게 살펴보고) 단위 테스트에 중점을 둡니다. 장소 상에서; 어쩌면 조롱하는 프레임 워크로; 코드를 실행하는 실제 배치 서비스에 의존하지 않아도됩니다.
2

@GhostCat의 답을 바탕으로 테스트에서 전체 작업 (총알 1)을 어떻게 운전할 것인지 묻는 것 같습니다. (물론 단위의 유용 개별적으로 리더/프로세서/라이터의 구성 요소를 할 수 있습니다 테스트.)

귀하의 기본 옵션

은 다음과 같습니다

  1. 사용 Arquillian이 (Arquillian와 자유를 시작하기에 링크 here 참조)를 사용하여 서버에서 테스트를 실행하고 Arquillian이 서버에 앱을 배포하고 결과를 수집하는 작업을 처리하도록 할 수 있습니다.

  2. JobOperator 인터페이스를 통해 자신의 서블릿 하네스를 작성하십시오. 출발 지점은 @aguibert의 대답을 this question으로보십시오. 작업에 제출자가 인식 할 수있는 다른 방법이 없다면 "완료"상태 (COMPLETED, FAILED 또는 STOPPED) 중 하나에 대해 JobExecution을 폴링하는 자신의 간단한 루틴을 작성할 수 있습니다. 명심해야 할


또 다른 기술은 시작 콩입니다.당신이 결과를하는 당신이해야합니다 (JobOperator 인터페이스를 사용하여 분리 작업을 확인하는 방법이있는 경우

@Startup 
@Singleton 
public class StartupBean { 

    JobOperator jobOp = BatchRuntime.getJobOperator(); 

    // Drive job(s) on startup. 
    jobOp.start(...);   

이 유용 할 수 있습니다 : 당신은 같은 시작 빈과 서버를 시작하여 작업을 간단하게 실행할 수 있습니다 서버에서). 테스트 결과를 폴링하고 작업 결과를 확인할 수 있습니다. HTTP 포트를 열 필요가 없으며 서버 시작 오버 헤드는 불과 몇 초입니다.