2012-03-11 47 views
3

我无法执行我的春节IntegrationTests,当我在它下面是在persist方法失败运行代码:的Spring Roo:JUnit测试失败

@RooIntegrationTest(entity = Person.class) 
public class PersonIntegrationTest { 

    @Test 
    public void test() { 

    } 
    @Test 
    public void testCountPeople(){ 
     Person personToPersist = PersonTestUtil.createTestPerson(); 

     personToPersist.persist(); 
     Long count = Person.countPeople(); 
     assertNotNull(personToPersist); 
     assertTrue(personToPersist.countPeople() == 1); 

    } 
} 

堆栈跟踪低于

java.lang.IllegalStateException: Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?) 
    at org.bixin.dugsi.domain.Person_Roo_Entity.ajc$interMethod$org_bixin_dugsi_domain_Person_Roo_Entity$org_bixin_dugsi_domain_Person$entityManager(Person_Roo_Entity.aj:95) 
    at org.bixin.dugsi.domain.Person.entityManager(Person.java:1) 
    at org.bixin.dugsi.domain.Person_Roo_Entity.ajc$interMethodDispatch1$org_bixin_dugsi_domain_Person_Roo_Entity$org_bixin_dugsi_domain_Person$entityManager(Person_Roo_Entity.aj) 
    at org.bixin.dugsi.domain.Person_Roo_Entity.ajc$interMethod$org_bixin_dugsi_domain_Person_Roo_Entity$org_bixin_dugsi_domain_Person$persist(Person_Roo_Entity.aj:58) 
    at org.bixin.dugsi.domain.Person.persist(Person.java:1) 
    at org.bixin.dugsi.domain.Person_Roo_Entity.ajc$interMethodDispatch1$org_bixin_dugsi_domain_Person_Roo_Entity$org_bixin_dugsi_domain_Person$persist(Person_Roo_Entity.aj) 
    at org.bixin.dugsi.domain.PersonIntegrationTest.testCountPeople(PersonIntegrationTest.java:25) 
    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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    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.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

任何人遇到这个问题?

回答

3

看来你还没有注入的EntityManager和相关的应用程序上下文来测试。

请尝试在类声明上方添加以下行。

@ContextConfiguration(locations = { "/META-INF/spring/applicationContext.xml","/META-INF/spring/applicationContext-security.xml" }) 

并尝试让您的测试课程从AbstractJUnit4SpringContextTests开始接收。请记住,您可能必须为要执行的某些操作实施认证。

您的测试类可能如下所示。

package com.myapp.test; 

@ContextConfiguration(locations = { "/META-INF/spring/applicationContext.xml","/META-INF/spring/applicationContext-security.xml" }) 
public class TestMyService extends AbstractJUnit4SpringContextTests { 

    @Autowired 
    MyService service = new MyService(); 

    private void setUp() { 
     //Do the setting up of your classes for the test 
    } 

    @Test 
    public void testOperation() throws IOException { 
     //My Test Code here 
    } 
} 

请注意,您通常应该为测试目的有不同的上下文。

干杯。

+0

当我添加了@ContextConfiguration线,以查找的位置,我没有在ApplicationContext-security.xml文件,所以我得到一个文件没有找到异常? – Warz 2012-03-11 18:11:26

+0

这是因为我认为Spring Security插件已安装在您的Roo项目中。您可以从位置列表中删除applicationContext-security.xml并尝试。 :) – bhagyas 2012-03-12 04:32:58

+0

我只是这样做,它删除了我得到的实体管理器错误,但我的测试仍然失败,“执行自动Bean验证时违反了Bean验证约束”? – Warz 2012-03-12 19:58:07

0

如果您使用的是Springsource Tool Suite(或其他Eclipse),请尝试清理该项目。我认为Eclipse someimes并不使用AJDT编译器,特别是在启动时。

我不记得从Roo控制台发出的这条消息,该消息使用引擎盖下的maven。

尝试从小豆壳“进行蚀”,甚至直接从控制台Maven的(MVN全新安装或类似的东西)

0

看来你忘了注入EntityManager和应用程序上下文。

尝试这样的事情,它为我工作用的Spring Roo:

import static org.junit.Assert.assertEquals; 

import org.junit.Test; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; 

import com.jitter.finance.analyzer.domain.Address; 

@ContextConfiguration(locations = { "classpath*:/META-INF/spring/applicationContext*.xml"}) 
public class EmTest extends AbstractJUnit4SpringContextTests { 

    @Test 
    public void checkEm(){ 
     Address a = new Address(); 
     a.setName("Primo"); 
     a.persist(); 

     Address b = new Address(); 
     b.setName("Secondo"); 
     b.persist(); 

     for(Address ad : Address.findAllAddresses()){ 
      System.out.println(ad.getName()); 
      assertEquals(ad.getName().charAt(ad.getName().length()-1), 'o'); 
     } 
    } 
}