当我 "Run Spring as JUnit Test" 时内部会发生什么?
What happens internally when I "Run Spring as JUnit Test"?
即使我的服务器不是 运行ning,当我 运行 作为 JUnit 测试时,我仍然可以加载 spring bean 和 属性 文件。
这是怎么回事?
是否创建了编译我的测试的 JVM 实例 class?
另外我还没有定义任何class路径。
默认的class路径是什么?它是如何找到我的 spring bean 的?
如果我想为属性文件提供相对于哪个文件夹的位置,应该给出其相对路径吗?
这取决于,在 eclipse 中它运行他们的 jUnit 插件。 spring 的所有魔力都归功于特定的运行程序,而不是 jUnit 本身。所有 spring 细节都在上下文文件中定义,但可以被覆盖。因此,如果您定义将使用的上下文文件,如果没有,则将使用一些默认值。
您的 Spring beans 不依赖于您的服务器,它们在您的应用程序执行时被初始化,例如通过 main 方法或单元测试 运行.
Spring 的工作方式是您将拥有一个定义 bean 的应用程序上下文,可能被定义为:
Java Class - 如果在 Java 中定义,则 class 将具有 @Configuration 注释,并且您的 bean 将使用 @Bean 注释进行标记
Xml 文件 - 文件中的条目可能类似于
<bean id="myBean" class="com.my.package.MyBean">
<constructor-arg ref="anotherBean"/>
</bean>
注意:bean 也可以通过注解定义。
好的做法表明,理想情况下,您应该有 2 个配置,一个用于服务 bean 等的应用程序,以及一个定义数据源的基础结构配置,这可能会因您的环境而异。根据环境更改基础结构设置的能力是您能够 运行 在本地以及在服务器上进行测试的一个关键原因。您可能会发现您已经为您的基础结构配置定义了配置文件,这意味着您可以在不同的环境中满足 运行 的测试需求,例如您的本地计算机上没有 SQL 服务器,因此您将改用内存数据库。
当应用程序执行时,在这种情况下通过单元测试,它将访问您的 spring bean 定义并开始实例化您的 beans(您可能会注意到测试开始时有轻微的延迟,同时发生这种情况) 完成后,您的应用程序就可以开始 运行 测试。
在测试的顶部 class 您可能有一些注释:
@RunWith(SpringJUnit4ClassRunner.class) - 这使得测试 class 运行 具有 Spring 支持
如果使用 java 配置
@ContextConfiguration(classes=myConfig.class)
如果使用 xml 配置
@ContextConfiguration(“class路径:com/my/app/resources/my-test-config.xml”
在没有看到任何代码示例的情况下,很难完全理解您的问题,但简而言之,您 class 上的 @ContextConfiguration 注释会告诉您 class 它从哪里获取 bean,但您可能还拥有定义数据源的配置文件。
默认的class路径将是您的项目设置使用的路径
可以在以下位置找到更多信息:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/
即使我的服务器不是 运行ning,当我 运行 作为 JUnit 测试时,我仍然可以加载 spring bean 和 属性 文件。
这是怎么回事?
是否创建了编译我的测试的 JVM 实例 class?
另外我还没有定义任何class路径。
默认的class路径是什么?它是如何找到我的 spring bean 的?
如果我想为属性文件提供相对于哪个文件夹的位置,应该给出其相对路径吗?
这取决于,在 eclipse 中它运行他们的 jUnit 插件。 spring 的所有魔力都归功于特定的运行程序,而不是 jUnit 本身。所有 spring 细节都在上下文文件中定义,但可以被覆盖。因此,如果您定义将使用的上下文文件,如果没有,则将使用一些默认值。
您的 Spring beans 不依赖于您的服务器,它们在您的应用程序执行时被初始化,例如通过 main 方法或单元测试 运行.
Spring 的工作方式是您将拥有一个定义 bean 的应用程序上下文,可能被定义为:
Java Class - 如果在 Java 中定义,则 class 将具有 @Configuration 注释,并且您的 bean 将使用 @Bean 注释进行标记
Xml 文件 - 文件中的条目可能类似于
<bean id="myBean" class="com.my.package.MyBean">
<constructor-arg ref="anotherBean"/>
</bean>
注意:bean 也可以通过注解定义。
好的做法表明,理想情况下,您应该有 2 个配置,一个用于服务 bean 等的应用程序,以及一个定义数据源的基础结构配置,这可能会因您的环境而异。根据环境更改基础结构设置的能力是您能够 运行 在本地以及在服务器上进行测试的一个关键原因。您可能会发现您已经为您的基础结构配置定义了配置文件,这意味着您可以在不同的环境中满足 运行 的测试需求,例如您的本地计算机上没有 SQL 服务器,因此您将改用内存数据库。
当应用程序执行时,在这种情况下通过单元测试,它将访问您的 spring bean 定义并开始实例化您的 beans(您可能会注意到测试开始时有轻微的延迟,同时发生这种情况) 完成后,您的应用程序就可以开始 运行 测试。
在测试的顶部 class 您可能有一些注释: @RunWith(SpringJUnit4ClassRunner.class) - 这使得测试 class 运行 具有 Spring 支持
如果使用 java 配置 @ContextConfiguration(classes=myConfig.class)
如果使用 xml 配置 @ContextConfiguration(“class路径:com/my/app/resources/my-test-config.xml”
在没有看到任何代码示例的情况下,很难完全理解您的问题,但简而言之,您 class 上的 @ContextConfiguration 注释会告诉您 class 它从哪里获取 bean,但您可能还拥有定义数据源的配置文件。
默认的class路径将是您的项目设置使用的路径
可以在以下位置找到更多信息:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/