小弟对WebService进行测试 环境是spring2.5 + JUnit 4  spring提供了一个包,spring-test 1.建立基本测试类 BaseServiceTest extends AbstractTransactionalSpringContextTests 2.重载 AbstractTransactionalSpringContextTests 的方法以读入spring等的配置文件 @Override 
        protected String[] getConfigLocations() { 
                String root = "file:d:/work/testook/web/WEB-INF/classes/spring/";                 String[] locations = {root+"dispatch-servlet.xml",root+"spring-hibernate.xml",root+"job.xml",root+"task.xml" }; 
                return locations; 
        } 3.然后对具体的XXService, 建立 XXServiceTest extends BaseServiceTest protected  AdminUserService adminUserService;         public AdminUserServiceTest(){ 
                setDependencyCheck(false); 
                //setup the directly annotation for the variables to avoid the setters 
                setPopulateProtectedVariables(true); 
        }        4.上面是对测试用例中涉及到的成员变量用依赖式注入 初始化 为何在父类中能找到那些 *.xml 在测试用例中,却报以下Exception,求助............ 已经GOOGLE2天了,没有人知道如何解决...郁闷org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from URL [file:d:/work/testooo/web/WEB-INF/classes/spring/dispatch-servlet.xml]; nested exception is java.lang.IllegalStateException: Annotation-specified bean name 'baseControler' for bean class [cn.testooox.controller.BaseControler] conflicts with existing, non-compatible bean definition of same name and class [cn.shell.controller.BaseControler]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
at org.springframework.test.AbstractSingleSpringContextTests.createApplicationContext(AbstractSingleSpringContextTests.java:242)
at org.springframework.test.AbstractSingleSpringContextTests.loadContextLocations(AbstractSingleSpringContextTests.java:212)
at org.springframework.test.AbstractSingleSpringContextTests.loadContext(AbstractSingleSpringContextTests.java:187)
at org.springframework.test.AbstractSpringContextTests.getContext(AbstractSpringContextTests.java:140)
at org.springframework.test.AbstractSingleSpringContextTests.setUp(AbstractSingleSpringContextTests.java:100)
at junit.framework.TestCase.runBare(TestCase.java:132)
at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:76)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.IllegalStateException: Annotation-specified bean name 'baseControler' for bean class [cn.shell.controller.BaseControler] conflicts with existing, non-compatible bean definition of same name and class [cn.shell.controller.BaseControler]
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:267)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:208)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:85)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1255)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1245)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
... 26 more

解决方案 »

  1.   

    可能是在多个spring配置文件里面重复引用
        <context:annotation-config/>
        <context:component-scan...... />导致的
      

  2.   

    意思是说你的在不同的package中含有相同的类,而这些类被context:component-scan管理进来了当进行注入的时候spring无法识别要注入那个类了,解决办法是不同的包下面的类也不要用相同的名字(如果这些类要用context:component-scan标签加载的话),或者等待spring的更新吧
      

  3.   

       貌似Spring的AbstractTransactionalSpringContextTests 不太好使
    我在SSH框架用JUnit测试也弄了一天,都还没搞定
       挺郁闷的
      

  4.   

    cn.testooox.controller.BaseControler
    cn.shell.controller.BaseControler将其中的一个名字改一下试试
      

  5.   

    你检查一下你测试类的注解, 如果基类已注解@ContextConfiguration(locations = { "/applicationContext.xml" })
    子类也有同样的注解的话, 就会得到类似的错误, 我曾经遇到过相同的错误!
      

  6.   

    用spring的组件扫描时,会存在这个问题,需要你自己保证在不同的包不面不能能相面名字的类