2013-10-23 14 views
2

우리는 CDI 응용 프로그램을 단위 테스트하기 위해 Jglue 프레임 워크를 사용하려고합니다. 우리는 건물을 위해 gradle을 사용합니다.단위 테스트 CDI 단위 Jglue와 함께

우리는이 같은 것을 준비했습니다 :

1) 클래스 테스트 :

@Default 
public class RateTypeHibernateFactory implements RateTypeFactory { 

@Override 
public RateType getInstance(String name, String description) { 
    RateType rateType = getInstance(); 
    rateType.setName(name); 
    rateType.setDescription(description); 
    return rateType; 
} 

} 

2) 인터페이스 :

public interface RateTypeFactory { 

public RateType getInstance(String name, String description); 

} 

3) Gradle을 설정 (우리가 http://jglue.org/cdi-unit/을 시작 다음)

dependencies { 

    testCompile (group: 'junit', name: 'junit', version: '4.8.2') 
    testCompile (group: 'org.jglue.cdi-unit', name: 'cdi-unit', version: '2.2.0') 

} 
,363,210

4) 테스트 클래스 : /build/reports/tests/index.html에서

com.etnetera.projects.ticketing.model.factory.RateTypeFactoryTest > testGetInstance FAILED 
java.lang.NoSuchMethodError 

1 test completed, 1 failed 
:test FAILED 

가 :

우리는이 간단한 테스트를 실행하면

@RunWith(CdiRunner.class) 
public class RateTypeFactoryTest { 

@Inject RateTypeFactory rateTypeFactory; 

@Test 
public void testGetInstance() { 
    RateType rateType = rateTypeFactory.getInstance(); 
    assertNotNull(rateType); 
} 

} 

, 우리는 항상이 예외가

java.lang.NoSuchMethodError: org.jboss.weld.metadata.BeansXmlImpl.<init>(Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lorg/jboss/weld/bootstrap/spi/Scanning;Ljava/net/URL;Lorg/jboss/weld/bootstrap/spi/BeanDiscoveryMode;Ljava/lang/String;)V 
at org.jglue.cdiunit.internal.WeldTestUrlDeployment.<init>(WeldTestUrlDeployment.java:80) 
at org.jglue.cdiunit.CdiRunner$1.createDeployment(CdiRunner.java:71) 
at org.jboss.weld.environment.se.Weld.initialize(Weld.java:137) 
at org.jglue.cdiunit.CdiRunner.createTest(CdiRunner.java:82) 
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:258) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:255) 
at org.jglue.cdiunit.CdiRunner.methodBlock(CdiRunner.java:113) 
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:55) 
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:42) 
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:71) 
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:49) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) 
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) 
at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) 
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) 
at $Proxy2.processTestClass(Unknown Source) 
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:103) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) 
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) 
at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355) 
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:662) 

제발 누구도이 예외를 피하는 방법을 알고 있습니까? 필요한 경우 더 자세한 정보를 추가 할 수 있습니다.

+0

의 추출물? –

+0

나의 용접 버전은 1.1.8입니다. –

+0

1.1.8가 2.1.1과 함께 작동해야합니다. 여전히 문제가 발생하면 문제 추적기에 버그를 제기하십시오. https://github.com/BrynCooke/cdi-unit/issues?state=open – Bryn

답변

1

이것은 대개 지원되지 않는 용접 버전이 사용 중이기 때문에 발생합니다. 그러나 저는 방금 Gradle 빌드로 몇 가지 문제를 수정 한 CDI-Unit 2.2.1을 출시했습니다. 제발 당신은 그것을 줄 수 있습니까?

+0

Gradle 샘플 프로젝트 아웃 : https://github.com/BrynCooke/cdi-unit/tree/master/cdi-unit-tests-gradle – Bryn

0

매개 변수없이 인터페이스에서 메소드를 호출하는 것 같습니다. 대신 RateType rateType = rateTypeFactory.getInstance(); 당신은 아마 Gradle을 관련 RateType rateType = rateTypeFactory.getInstance("name", "description");

어쩌면 내가 뭔가를 놓친 전화를해야합니까?

0

비슷한 문제가 발생했습니다 (오류 메시지가 조금 다릅니다). 나는이 문제를 둘러싼 많은 것을 봤지만 이것에 대해서는별로 알지 못했다. 그래서 나는 그것이 내 프로젝트에만 국한된 것이라고 결론 내렸다. 이로 인해 프로젝트 종속성 사이의 버전 불일치가 의심됩니다.

나는 compile 의존성으로 weld-servlet: 2.4.0.Final 의존성을 사용했고, test 의존성으로 cdi-unit: 3.1.4 의존성을 사용하고있었습니다. 그리고 나는 cdi-unitweld-se-core: 2.3.2.Final에 의존했다는 것을 알았습니다. 그래서 weld-se-core을 내 weld-servlet 인공물과 동일한 버전으로 내 종속성 관리에 추가하고 문제를 해결했습니다. 더 참고로

, 여기 내 pom.xml 파일 당신이에 대해 실행하는 용접의 어떤 버전

<properties> 
    <weld.version>2.4.0.Final</weld.version> 
    <cdi-unit.version>3.1.4</cdi-unit.version> 
    (...) 
</properties> 

<dependencyManagement> 
    <dependencies> 
     <!-- CDI --> 
     <dependency> 
      <groupId>org.jboss.weld.servlet</groupId> 
      <artifactId>weld-servlet</artifactId> 
      <version>${weld.version}</version> 
     </dependency> 
     <!-- Tests --> 
     <dependency> 
      <groupId>org.jglue.cdi-unit</groupId> 
      <artifactId>cdi-unit</artifactId> 
      <version>${cdi-unit.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.weld.se</groupId> 
      <artifactId>weld-se-core</artifactId> 
      <version>${weld.version}</version> 
      <scope>test</scope> 
     </dependency> 
     (...) 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
    <!-- CDI --> 
    <dependency> 
     <groupId>org.jboss.weld.servlet</groupId> 
     <artifactId>weld-servlet</artifactId> 
    </dependency> 
    <!-- Tests --> 
    <dependency> 
     <groupId>org.jglue.cdi-unit</groupId> 
     <artifactId>cdi-unit</artifactId> 
    </dependency> 
    (...) 
</dependencies>