0

我正在使用带有surefire插件的Maven通过扩展AbstractTestNGSpringContextTests来运行TestNG测试,即使它在类路径中,它似乎也没有加载上下文,并且测试在我的ide中正常工作,但在maven中没有。

@ContextConfiguration(locations = Array("classpath*:/com/gottex/gottware/server/offlinepuwithdummydatafeed.xml")) 我的 xml 在 src/test/com/gottex/gottware/server 下

我的父母 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 不包含任何依赖关系..

4

1 回答 1

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.URLClassLoader 并且可以正常工作
  • 当通过 Maven-Surefire 插件运行测试时,使用不同的类加载器:ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.9, parent: sun.misc.Launcher$AppClassLoader@61ba34f2]

第二个 classLoader 返回一个没有“moreElements”的枚举 resourceUrls,因此不会加载上下文,但框架不会抛出任何失败。

于 2012-05-09T15:27:46.870 回答