当前位置: 首页 > 知识库问答 >
问题:

TestNG+Spring+Maven=无法加载上下文

吴靖
2023-03-14

我使用Maven和surefire插件通过扩展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不包含任何东西,如果不是依赖..

共有1个答案

阮桐
2023-03-14

经过长时间的调试,我终于能够找到问题。它位于类加载器级别,并且在调试时显示

org.springframework.core.io.support.PathMatchingResourcePatternFindAllClasspathResources方法内部的解析程序

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()]);
    }

这是在加载上下文时完成的,并产生以下结果:

  • 在idea内部运行时,类加载器是java.net.urlClassLoader,它可以正常工作
  • 通过Maven-Surefire插件运行nignG测试时,将使用不同的类加载器:classrealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.9,parent:sun.misc.launcher$AppClassLoader@61BA34F2]

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

 类似资料:
  • 无法完成安装,因为找不到一个或多个必需的项目。 正在安装的软件:TestNG M2E(Maven)Integration(可选)6.13.0.201712040650(org.TestNG.eclipse.Maven.feature.feature.group 6.13.0.201712040650)缺少要求:TestNG M2E(Maven)Integration 6.13.0.20171204

  • 当我试图在STC中编译一个Spring MVC项目时,我遇到了以下错误。未能转移组织。阿帕奇。马文。插件:maven surefire插件:pom:2.7.1 fromhttp://repo1.maven.org/maven2已缓存在本地存储库中,在经过central的更新间隔或强制更新之前,不会重新尝试解析。原始错误:无法转移工件组织。阿帕奇。专家从中央插件到中央插件:7次 我可以从我的网络浏览

  • 问题内容: 即使清除了settings.xml,尝试使用此快照依赖项时仍然出现此错误。给定依赖性: 并且(在POM中),插件存储库定义: 我留下了以下404错误。如果我实际导航到该存储库,那么它所寻找的jar就不存在了,只是陈旧的(我不熟悉Maven最终解析期望的依赖项名称的机制)。 有想法吗? 问题答案: 我重新检查了以下pom片段: 插件的SNAPSHOT已成功下载: 这很奇怪,因为我看不到任

  • 预期行为 应该可以通过Run As->TestNG启动测试;还应该能够为TestNG添加新的运行配置 实际行为 插件org.testng.eclipse无法加载类org.testng.eclipse.launch.testngtabgroup。异常:org.eclipse.core.runtime.core异常:插件org.testng.eclipse无法加载类org.testng.eclipse

  • 基本信息:我使用Eclipse Juno中的embedded Maven 3.0.4(带有JBoss工具)。 注意:我还尝试了repository.jboss.org/nexus/content/groups/jboss和repository.jboss.org/nexus/content/groups/public/,结果相同。 我做了什么:我使用工件org.jboss.spec.archety

  • 所以我有一个项目,在其中我使用Spring boot,并希望利用一个模块系统。我希望模块系统能够动态地重新加载。我让它几乎可以工作,但是@ComponentScan在模块中完全不工作。 有一个模块文件夹,包含启动时加载的jar文件,需要动态卸载、加载和重新加载。 模块通过AnnotationConfigApplicationContext创建,上下文的类加载器设置为核心的类加载器,模块接口中的方法