程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了spring junit load应用程序上下文进行测试大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决spring junit load应用程序上下文进行测试?

开发过程中遇到spring junit load应用程序上下文进行测试的问题如何解决?下面主要结合日常开发的经验,给出你关于spring junit load应用程序上下文进行测试的解决方法建议,希望对你解决spring junit load应用程序上下文进行测试有所启发或帮助;

选项1(由于最佳做法,应首选):在下面 重构配置文件,WEB-INF并将公用部分(你也希望从集成测试中访问)移至src/main/resources/@H_404_2@。然后写入特定于测试的配置文件src/test/resources/@H_404_2@(如果你只需要从中导入几个不同的配置文件src/main@H_404_2@以组装你的测试上下文,请跳过此步骤,并@ContextConfiguration@H_404_2@优先使用)。

选项2(Hack): 使用类似的引用:

@ContextConfiguration("file:src/main/webapp/WEB-INF/datasource.xml")
@H_404_2@

选项3(Hack): 如果你有Maven项目,则可以配置maven-surefire-plugin(在测试阶段使用)src/main/webapp在测试执行期间声明为其他classpath元素。

后两个选项被认为是Hack,因为下面的文件src/main/webapp根本不应该位于类路径中。

现在详细说明: 之所以不能引用这些文件,classpath:/WEB-INF/*.xml@H_404_2@是因为它们确实不在类路径中。重要的是要了解你的Web应用程序是如何打包的,以及最终在类路径上结束的内容。假设默认的Maven项目结构为:

  1. java类从编译后src/main/java@H_404_2@进入/WEB-INF/classes@H_404_2@。
  2. 资源也从src/main/resources@H_404_2@转到/WEB-INF/classes@H_404_2@。
  3. 项目依赖项转到/WEB-INF/lib@H_404_2@。
  4. 你拥有的所有内容都src/main/webapp@H_404_2@将到达/(包的根目录)。当然,这意味着所有文件都从src/main/webapp/WEB-INF@H_404_2@转到/WEB-INF@H_404_2@。

要知道的最重要的一点是,classpath将只包含/WEB-INF/classes一个条目,其中的每个jar 都包含一个条目/WEB-INF/lib。因此,对于类加载器,这两个位置之外的资源是完全不可见的。直接位于下 的xml配置文件也是如此/WEB-INF,这就是为什么该引用classpath:/WEB-INF/datasource.xml永远无法工作的原因。

你可能会问自己,如果无法从类路径访问Spring,那么这些xml配置文件又会如何加载呢?答案很简单:启动webapp(而不是仅执行单元/集成测试)时,它运行在Servlet容器中,该容器提供ServletContext对Servlet API@H_404_2@的实际类的访问,因此它用于ServletContext.getresourceAsstream()@H_404_2@加载这些应用程序文件。理解的关键是该方法的javadoc中的以下引号:

此方法与使用类加载器的java.lang.class.getresourceAsstream@H_404_2@不同。此方法允许Servlet容器从任何位置使servlet可以使用资源,而无需使用类加载器。

解决方法

我的WEB-INF目录下有一些XML文件:

  • lyricsBaseApp-servlet.xml
  • hibernate.xml
  • datasource.xml
  • beans.xml

servlet xml导入其他xml文件:

<import resource="datasource.xml"/>
<import resource="hibernate.xml"/>
<import resource="beans.xml"/>

我希望我的junit4 JukeboxTest类包含整个spring配置。使用默认文件名,我创建了一个JukeboxTest-content.xml文件。最后,我不知道该放在哪里&Hellip;

我试过了

<import resource="/WEB-INF/datasource.xml"/>
<import resource="/WEB-INF/hibernate.xml"/>
<import resource="/WEB-INF/beans.xml"/>

要么

<import resource="classpath:./WEB-INF/datasource.xml"/>
<import resource="classpath:./WEB-INF/hibernate.xml"/>
<import resource="classpath:./WEB-INF/beans.xml"/>

和其他一些想法,但都失败了。有人可以指出我如何访问这些文件以及spring解释这些文件路径的方式吗?

@H_616_100@

大佬总结

以上是大佬教程为你收集整理的spring junit load应用程序上下文进行测试全部内容,希望文章能够帮你解决spring junit load应用程序上下文进行测试所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。