2015-01-30 4 views
1

다른 EJB/CDI Bean (5-10과 같은)에 따라 EJB가 자주 있고 많은 메소드가 그 중 일부만 사용합니다. 통합 테스트 (우리는 Glassfish 4.0 컨테이너가 내장 된 Arquillian을 사용하고 있습니다) 전체 클래스 그래프에 대한 종속성을 제공해야하기 때문에 고통 스럽습니다. 하나의 테스트를 완료하는 데 필요한 시간이 상당히 증가하기 때문에 전체 패키지를 추가하면 더 많은 종속성이 생기고 모든 클래스를 추가하지 않으므로 하나씩 클래스를 ShrinkWrap 아카이브에 추가합니다. 또한 모든 테스트에 대해 모든 클래스를 추가하고 싶지 않습니다. 특히 파일 시스템을 만지거나 셸 명령을 실행하는 모든 클래스가 필요합니다.Arquillian에서 많은 의존성을 지닌 EJB 통합 테스트

종속성 그래프가 커지면 UnsupportedOperationExceptions를 던지는 메소드를 사용하여 EJB 인터페이스를 구현함으로써 더미 객체를 만들지 만, 많은 객체가 있고 클래스 이름 변경을 유지하기가 어렵 기 때문에 지루해지고 있습니다 MyService에 대한 DummyMyService가 있지만 OldService에서 이름이 바뀌었기 때문에 DummyOldService를 찾지 못했기 때문에 다른 더미를 만들 것입니다.

EJB/CDI Bean의 통합 테스트에 대해 더미 클래스를 자동으로 생성 할 수 있습니까 (UnsupportedOperationExceptions를 사용하지 않거나 던짐)? 뭔가 같은 :

ShrinkWrap.create(JavaArchive.class, "test.jar") 
    .addClass(MyTestedService.class) 
    .addClass(ImportantDependency.class) 
    .addClass(Dummy.createDummy(DependencyNeededForSomeMethods.class)); 
나는 단지 doImportantThings 방법을 테스트 할이 같은 클래스에 대한

: 어쩌면

@Stateless 
public class MyTestedService { 

    @Inject 
    private ImportantDependency importantDependency; 

    @Inject 
    private DependencyNeededForSomeMethods dependencyNeededForSomeMethods; 

    public void doImportantThings(){ 
     .... 
     importantDependency.doIt(); 
     .... 
    } 

    public void doSomethingElse(){ 
     .... 
     dependencyNeededForSomeMethods.doRarelyNeededThings(); 
     .... 
     importantDependency.doAnotherThing(); 
    } 
} 

을 또는 아래에있는 클래스를 리팩토링을 제외하고 그것을 (처리하는 또 다른 방법이 테스트)?

+0

테스트에서 종속성을 사용하지 않는 경우 왜 패키지합니까? –

+0

그렇지 않으면 CDI 컨테이너 (Weld, 내 글래스 피시 컨테이너를 사용하고 있기 때문에)는 불만족 한 의존성에 대해 불평 할 것입니다. – piotrek

답변

1

나는 그런 기능을 제공하지 않는다고 생각합니다. 아마도 그것은 나쁜 디자인의 징후 일 것입니다. 패키지 구조를 변경해야합니다. 그런 다음 원하는 패키지로만 래핑을 만듭니다.

0

저는 Arquillian 대신 통합 테스트를 위해 원격 EJB 호출을 사용하고 있습니다. 우리는 모든 빈에 대한 인터페이스를 생성해야하지만, 통합 테스트를 위해 대체 애플리케이션 패키지를 작성할 필요가 없으며 내 경우에 더 빠른 성능을 제공합니다. 물론 CDI 빈에 대해서는 작동하지 않습니다. I posted a blog entry about my case.

+0

인터페이스를 만들면 정말 피하고 싶습니다. 이것이이 질문의 주된 이유입니다. 인터페이스를 추가하여 스텁을 만들어야했습니다. – piotrek

관련 문제