在Objectify中注册实体在测试用例期间有问题



我们有一个使用Objectify4和Spring3.1开发的项目,并在GAE上部署和运行,我们使用IDE作为STS。

当我使用Maven(cmdmvn install)在本地进行项目构建时,测试用例失败并抛出以下异常。

从异常中,我观察到它在测试类Class1UnitTest中注入Class1Service服务类时失败(这不仅在这个测试类中,它在每个测试类中给出相同的异常,无论我们注入任何扩展AbstractBaseImpl的服务类)。

在异常堆栈跟踪中,我看到它指向AbstractBaseImpl中注册实体类(EntityClassA)的行。在实体类EntityClassA中,我们使用了@Mapify,如果我删除实体类中的@Mapify注释,测试用例正在运行,没有任何bean初始化问题。我尝试从STS构建项目,也从命令仍然得到同样的问题。

从功能的角度来看,如果我在构建时跳过测试用例,应用程序工作得很好。有没有人看到在测试用例中注册时定义@Mapify并获得问题的实体的类似问题?

感谢您的宝贵时间

详情如下,

EntityClassA.java

@Entity
public class EntityClassA {
@Index @Mapify( ChildClassAMapper.class ) 
private Map<Integer, ChildClassA> intervalToReward = new LinkedHashMap<>(); 
@Embed
public static class ChildClassA extends ClassA {
private static final long serialVersionUID = 49769454099624971L;
private int …;
private long …;

public ChildClassA(  ) {
…..
}
}
public static class ChildClassAMapperMapper implements Mapper<Integer, ChildClassA> {
@Override
public Integer getKey( ChildClassA value ) {
return value.getInterval();
}
}
}

AbstractBaseImpl.java

@Component
public abstract class AbstractBaseImpl implements BaseService {
static {
Line-12     ObjectifyService.register( EntityClassA.class );
}
}

ChallengeServiceImpl.java

@Service
@Slf4j
public class Class1ServiceImpl extends AbstractBaseImpl implements Class1Service {
// method to store data using objectify..
}

CoreBaseTest.java

@ContextConfiguration( 
locations = { "classpath*:META-INF/spring/core-applicationContext.xml" } )
@RunWith( SpringJUnit4ClassRunner.class )
public abstract class CoreBaseTest {
private final LocalServiceTestHelper helper = new LocalServiceTestHelper( 
new LocalDatastoreServiceTestConfig().setApplyAllHighRepJobPolicy(), 
new LocalBlobstoreServiceTestConfig(),
new LocalTaskQueueTestConfig(), 
new LocalMemcacheServiceTestConfig() );
}

Class1UnitTest.java

public class Class1UnitTest extends CoreBaseTest {
@Resource( name = "class1Service" ) 
private Class1Service class1Service;
//Testcases…
}

core-applicationContext.xml

<bean id="class1Service" class="com.suvs.app.core.spring.services.Class1ServiceImpl" />

TestCrud(test.core.Class1UnitTest')  Time elapsed: 0.163 sec  <<< ERROR!

org.springframework.beans.factory。创建名为"test.core"的bean时出错。Class1UnitTest':注入资源依赖失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:在URL [file:/Users/suvs/core-app/target/classes/metadata - inf/spring/core-applicationContext.xml]中定义名称为'class1Service'的bean时出错:bean的实例化失败;嵌套异常是java.lang.AssertionErrororg.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues (CommonAnnotationBeanPostProcessor.java: 307)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java: 1106)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties (AbstractAutowireCapableBeanFactory.java: 374)org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies (DependencyInjectionTestExecutionListener.java: 110)org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance (DependencyInjectionTestExecutionListener.java: 75)org.springframework.test.context.TestContextManager.prepareTestInstance (TestContextManager.java: 321)org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest (SpringJUnit4ClassRunner.java: 211)org.springframework.test.context.junit4.SpringJUnit4ClassRunner runreflectivecall 1.美元(SpringJUnit4ClassRunner.java: 288)org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java: 15)org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock (SpringJUnit4ClassRunner.java: 290)org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java: 231)在org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java: 47)在org.junit.runners.ParentRunner 3.美元运行(ParentRunner.java: 231)在org.junit.runners.ParentRunner 1.美元计划(ParentRunner.java: 60)org.junit.runners.ParentRunner.runChildren (ParentRunner.java: 229)org.junit.runners.ParentRunner.access 000美元(ParentRunner.java: 50)org.junit.runners.ParentRunner评估2.美元(ParentRunner.java: 222)org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate (RunBeforeTestClassCallbacks.java: 61)org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java: 71)org.junit.runners.ParentRunner.run (ParentRunner.java: 300)org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner.java: 174)在org.apache.maven.surefire.junit4.JUnit4TestSet.execute (JUnit4TestSet.java: 53)org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet (JUnit4Provider.java: 123)org.apache.maven.surefire.junit4.JUnit4Provider.invoke (JUnit4Provider.java: 104)在sun.reflect.NativeMethodAccessorImpl。invoke0(本地方法)在sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 57)sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 43)java.lang.reflect.Method.invoke (Method.java: 601)org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray (ReflectionUtils.java: 164)org.apache.maven.surefire.booter.ProviderFactory ProviderProxy.invoke美元(ProviderFactory.java: 110)org.apache.maven.surefire.booter.SurefireStarter.invokeProvider (SurefireStarter.java: 175)org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked (SurefireStarter.java: 107)org.apache.maven.surefire.booter.ForkedBooter.main (ForkedBooter.java: 68)org.springframework.beans.factory.BeanCreationException:在URL [file:/Users/suvs/core-app/target/classes/metadata - inf/spring/core-applicationContext.xml]中定义名称为'class1Service'的bean创建错误:bean的实例化失败;嵌套异常是java.lang.AssertionErrororg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean (AbstractAutowireCapableBeanFactory.java: 997)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java: 943)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java: 485)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java: 456)在1.美元org.springframework.beans.factory.support.AbstractBeanFactory getobject (AbstractBeanFactory.java: 294)org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java: 225)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java: 291)org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java: 197)org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource (CommonAnnotationBeanPostProcessor.java: 443)org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource (CommonAnnotationBeanPostProcessor.java: 417)org.springframework.context.annotation.CommonAnnotationBeanPostProcessor ResourceElement.getResourceToInject美元(CommonAnnotationBeanPostProcessor.java: 559)org.springframework.beans.factory.annotation.InjectionMetadata InjectedElement.inject美元(InjectionMetadata.java: 150)org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java: 87)org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues (CommonAnnotationBeanPostProcessor.java: 304)…32更多原因:java.lang.AssertionErrorcom.googlecode.objectify.impl.translate.CreateContext.enterCollection (CreateContext.java: 70)在com.googlecode.objectify.impl.translate.CollectionTranslatorFactory.create (CollectionTranslatorFactory.java: 49)com.googlecode.objectify.impl.translate.TranslatorRegistry.create (TranslatorRegistry.java: 90)在com.googlecode.objectify.impl.translate.ClassTranslator。(ClassTranslator.java: 52)com.googlecode.objectify.impl.translate.EmbedClassTranslatorFactory.create (EmbedClassTranslatorFactory.java: 43)com.googlecode.objectify.impl.translate.TranslatorRegistry.create (TranslatorRegistry.java: 90)com.googlecode.objectify.impl.translate.MapifyTranslatorFactory.create (MapifyTranslatorFactory.java: 62)com.googlecode.objectify.impl.translate.TranslatorRegistry.create (TranslatorRegistry.java: 90)在com.googlecode.objectify.impl.translate.ClassTranslator。(ClassTranslator.java: 52)在com.googlecode.objectify.impl.translate.EntityClassTranslator。(EntityClassTranslator.java: 46)在com.googlecode.objectify.impl.Transmog。(Transmog.java: 49)在com.googlecode.objectify.impl.ConcreteEntityMetadata。(ConcreteEntityMetadata.java: 58)com.googlecode.objectify.impl.Registrar.register (Registrar.java: 74)com.googlecode.objectify.ObjectifyFactory.register (ObjectifyFactory.java: 180)com.googlecode.objectify.ObjectifyService.register (ObjectifyService.java: 62)com.suvs.app.core.spring.services.AbstractBaseImpl。(AbstractBaseImpl.java: 12)在sun.reflect.NativeConstructorAccessorImpl。newInstance0(本地方法)在sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java: 57)sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java: 45)java.lang.reflect.Constructor.newInstance (Constructor.java: 525)org.springframework.beans.BeanUtils.instantiateClass (BeanUtils.java: 147)org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate (SimpleInstantiationStrategy.java: 76)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean (AbstractAutowireCapableBeanFactory.java: 990)…45更多

是否ChildClassA也包含一个集合,因此您正在尝试嵌套两个嵌入式集合?看起来像是从堆栈跟踪中得到的。这在Objectify4中是不可能的。我强烈推荐升级到5。

相关内容

最新更新