2012-05-08 28 views
0

我使用Maven与神火插件来运行TestNG的测试,它出现的上下文不加载,即使它是在类路径中,试验工作正常我的IDE中,但不是在maven中。TestNG的+弹簧+的Maven =无法通过延长AbstractTestNGSpringContextTests加载上下文

@ContextConfiguration(位置= 阵列( “类路径*:/ COM/gottex/gottware /服务器/ offlinepuwithdummydatafeed.xml”)) 我的XML是在src /测试/ COM/gottex/gottware /服务器

我父POM包含:

  <build> 
    <defaultGoal>package</defaultGoal> 
    <testResources> 
     <testResource> 
      <directory>src/test/java</directory> 
      <includes> 
       <include>**/*.xml</include> 
       <include>**/*.properties</include> 
      </includes> 
     </testResource> 
    </testResources> 

    <plugins> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.9</version> 
       <configuration> 
        <verbose>true</verbose> 
        <forkMode>never</forkMode> 

       </configuration> 

      </plugin> ... 

和我的孩子POM如果没有依赖关系不包含任何..

+0

哪个Maven的版本?你怎么样? – khmarbaise

回答

0

长时间调试会话后,我终于能找到问题所在。它位于ClassLoader的水平,和调试

org.springframework.core.io.support.PathMatchingResourcePatternResolver 里面的方法findAllClassPathResources

protected Resource[] findAllClassPathResources(String location) throws IOException { 
     String path = location; 
     if (path.startsWith("/")) { 
      path = path.substring(1); 
     } 
     Enumeration resourceUrls = getClassLoader().getResources(path); 
     Set<Resource> result = new LinkedHashSet<Resource>(16); 
     while (resourceUrls.hasMoreElements()) { 
      URL url = (URL) resourceUrls.nextElement(); 
      result.add(convertClassLoaderURL(url)); 
     } 
     return result.toArray(new Resource[result.size()]); 
    } 

这当上下文是完成时,它表现出自身加载并产生以下结果:

  • 当你运行里面的想法时,ClassLoader是java.net.URLClassLoa der并且这个工作正常
  • 当通过Maven-Surefire插件进行runnigng测试时,使用了不同的类加载器:ClassRealm [plugin> org.apache.maven.plugins:maven-surefire-plugin:2.9, parent:sun.misc。启动$ AppClassLoader @ 61ba34f2]

第二类加载器返回一个枚举resourceUrls没有“moreElements”,因此没有加载的背景下,但没有失败是由框架抛出。