2014-03-03 5 views
6

maven 3.2.1을 사용하여 GAE 1.9.0 프로젝트의 단위 테스트를 실행하려고했습니다. 데이터 저장소 관련 테스트 실패 :Google App Engine 데이터 저장소 유닛 테스트 (Maven 포함)

java.util.ServiceConfigurationError: 
com.google.appengine.tools.development.LocalRpcService: 
Provider com.google.appengine.api.datastore.dev.LocalDatastoreV4Service 
could not be instantiated: java.lang.NoClassDefFoundError: 
com/google/apphosting/datastore/DatastoreV4$LookupRequestOrBuilder 

나는 이것이 종속성을 놓친다는 것을 이해합니다. 데이터 저장소 테스트를 위해 pom.xml을 올바르게 구성하는 방법에 관한 문서를 찾지 못하는 것 같습니다. 참조

public final LocalServiceTestHelper helper = new LocalServiceTestHelper(
      new LocalDatastoreServiceTestConfig(), 
      new LocalTaskQueueTestConfig(), 
      new LocalBlobstoreServiceTestConfig(), 
      new LocalUserServiceTestConfig())); 

: 시험은 내가 도우미에

helper.setup() 

를 호출 할 때 충돌이 내 pom.xml 파일에

https://developers.google.com/appengine/docs/java/tools/maven#junit_dependencies_optional

https://developers.google.com/appengine/docs/java/tools/localunittesting#Java_Writing_Datastore_and_memcache_tests

테스트 종속성

,691 스택 추적의 363,210
 <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-testing</artifactId> 
      <version>${appengine.target.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-api-stubs</artifactId> 
      <version>${appengine.target.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-api-labs</artifactId> 
      <version>${appengine.target.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>3.2.1.RELEASE</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>spring</groupId> 
      <artifactId>spring-mock</artifactId> 
      <version>1.0.2</version> 
      <scope>test</scope> 
     </dependency> 

나머지 :

at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 
     at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) 
     at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) 
     at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 
     at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) 
    Caused by: java.lang.NoClassDefFoundError: com/google/apphosting/datastore/DatastoreV4$LookupRequestOrBuilder 
     at java.lang.Class.getDeclaredConstructors0(Native Method) 
     at java.lang.Class.privateGetDeclaredConstructors(Class.java:2493) 
     at java.lang.Class.getConstructor0(Class.java:2803) 
     at java.lang.Class.newInstance(Class.java:345) 
     at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:373) 
     ... 42 more 
    Caused by: java.lang.ClassNotFoundException: com.google.apphosting.datastore.DatastoreV4$LookupRequestOrBuilder 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
+0

해결 방법을 찾으셨습니까? – Keith

+0

아니 죄송합니다 - 나는 SQL 데이터베이스에 대한 통합 테스트를 실행하고있어 DB를 마이 그레 이드 관련 테스트를 마이 그 레이션. – bsautner

+0

동일한 작업을 수행해야했습니다. 기본적으로 https://developers.google.com/appengine/docs/java/tools/maven#junit_dependencies_optional 섹션에서 언급 한 종속성을 추가했습니다. "Google App 용 pom.xml 설정 구성 엔진 "과 그것이 작동했습니다 – Madhan

답변

0

내가 너희들이 해결하지만, 1.8.2 나를 위해 일한 GAE 버전을 사용하는 경우 몰라!

+0

pom.xml을 게시 하시겠습니까? – bsautner

+0

죄송합니다. 나는 할 수 없습니다. 독점 소프트웨어입니다. – Leonardo

1

내 경우에는 build.gradle에 testCompile 'com.google.appengine:appengine-tools-sdk:1.9.24'을 추가하여 수정했습니다. (나는 Gradle을 사용하고 - 받는다는에 해당이 동일해야합니다.) 여기 내 테스트 의존성은 다음과 같습니다

// Test 
testCompile "junit:junit:4.12" 
testCompile 'com.google.appengine:appengine-testing:1.9.24' 
testCompile 'com.google.appengine:appengine-api-labs:1.9.24' 
testCompile 'com.google.appengine:appengine-api-stubs:1.9.24' 
testCompile 'com.google.appengine:appengine-tools-sdk:1.9.24' 

내가 변경 모르겠어요 - 그것은 그 의존성없이 작동하는 데 사용됩니다. 그러나 적어도 그 문제를 해결하기위한 솔기.

관련 문제