2012-10-15 1 views
2
모의

을 통해 다른 교환.EJB 3.1 단위 테스트, 두 콩, 하나 @DependsOn 나는 현재 글래스 피시 3.1.2.2와 처음 EJB 프로젝트를 진행

@Singleton 
@Startup 
public class ABean implements AInterface { 
//implementation 
} 

@DependsOn("ABean") 
@Startup 
@Singleton 
@EJB(name = "ABean", beaninterface = AInterface) 
public class BBean implements BInterface { 
//implementation 
} 

내가 원하는 단위 테스트에 "BBean"하고 조롱은 "ABean"나는 두 콩이있다. 현재 JUnitTest를 시작할 때 "ABean"이 시작되지만 은 "ABean"을 "ABeanMock"과 교환하는 방법이 있습니까?

나는이 테스트는 젠킨스 서버에서 실행되는 바와 같이, 모의로 구현을 교환하는 자동 메커니즘이 필요합니다. 따라서 단일 수동 테스트에서는 코드를 수동으로 채택 할 수 있지만 자동 테스트에서는 구현할 수 없습니다.

내가 단위 테스트에 대한 글래스 피시 임베디드 API를 사용하고 있습니다.

도움 주셔서 감사합니다.

답변

0

이에 대한 Arquillian를 사용할 수 있습니다.

Arquillian 컨테이너 내에서 테스트를 실행하고 필요한 경우 응용 프로그램 서버에 배포합니다. 선택한 클래스 만 사용하도록 선택할 수 있으므로 AInterface을 구현하는 대체 ABean을 만들고 실제ABean을 배포하지 않도록 선택하면 대신 대체가 사용됩니다.

@Singleton(name = "ABean") 
class AMockBean implements AInterface { 
    // Mocked bean implementation 
} 

@RunsWith(Arquillian.class) 
public class MyTests { 

    @Inject 
    private BBean bbean; 

    @Deployment 
    public Archive<?> deployment() { 
    return ShrinkWrap.create(JavaArchive.class) 
      .addClass(BBean.class) 
      .addClass(AMockBean.class) 
      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); 
    } 

    @Test 
    public void testBBean() { 
    bbean.whatever(); 
    } 
} 

이 모든 안된이지만, 이것의 라인을 따라 뭔가해야한다 :

테스트는 다음과 같이 보일 것입니다. 환경 및 종속성에 따라 올바르게 구성하는 것이 더 어려울 수 있습니다.

Arquillian은 훌륭한 도구이지만, 시작할 때 원하는 방식으로 정확하게 설정하는 것은 어려울 수 있습니다. 다행히도 과정을 통해 당신을 도울 수 있습니다.