当我"将Spring作为JUnit测试运行时,内部会发生什么?#34 ;?

时间:2016-09-20 08:23:56

标签: java eclipse junit spring-test

即使我的服务器没有运行,我仍然可以在运行JUnit Test时加载spring bean和属性文件。

这是怎么回事?

是否创建了一个JVM实例来编译我的测试类?

此外,我还没有定义任何类路径。

默认的classpath是什么?怎么能找到我的春豆?

如果我想为属性文件提供关于哪个文件夹应该给出其相对路径的位置?

2 个答案:

答案 0 :(得分:1)

您的Spring bean不依赖于您的服务器,它们会在您的应用程序执行时初始化,例如通过主方法或单元测试运行。

Spring的工作方式是你将拥有一个定义你的bean的应用程序上下文,可能被定义为:

Java类 - 如果在Java中定义,该类将具有@Configuration批注,并且您的bean将使用@Bean批注标记

Xml文件 - 该文件中的条目可能类似于

<bean id="myBean" class="com.my.package.MyBean">
     <constructor-arg ref="anotherBean"/>
</bean>

注意:bean也可以通过注释定义。

良好实践要求理想情况下,您应该有2个配置,一个应用程序用于服务bean等。和一个infra-structure配置定义您的数据源,这可能会因您的环境而异。根据环境更改基础结构设置的能力是您能够在服务器上本地运行测试的关键原因。您可能会发现已为基础架构配置定义了配置文件,这意味着您可以满足您的测试需要在不同的环境中运行,例如:您在本地计算机上没有SQL服务器,因此您将使用内存数据库。

当执行应用程序时,在这种情况下,通过单元测试,它将访问你的spring bean定义并开始实例化你的bean(你可能会注意到在测试开始的时候发生了一些轻微的延迟)一旦完成,您的应用程序很适合开始运行测试。

在测试类的顶部,您可能会有一些注释: @RunWith(SpringJUnit4ClassRunner.class) - 这使得测试类运行Spring支持

如果使用java配置 @ContextConfiguration(classes = myConfig.class)

如果使用xml配置 @ContextConfiguration(“类路径:COM /我的/应用程序/资源/我的测试-config.xml中”

在没有看到任何代码示例的情况下,很难完全理解您的问题,但简而言之,类上的@ContextConfiguration注释会告诉您的类从哪里挑选您的bean,但您可能还有配置文件来定义您的数据来源是。

默认的类路径将是您的项目设置为使用

的任何内容

可在以下网址找到更多信息:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/

答案 1 :(得分:0)

这取决于,在eclipse中它运行他们的jUnit插件。所有弹簧的魔力都归功于特定的跑步者,而不是jUnit本身。所有弹簧细节都在上下文文件中定义,但可以覆盖。因此,如果你定义了一个将被使用的上下文文件,如果没有,那么将使用一些默认值。