`
alfred.w
  • 浏览: 92234 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Unitils 使用指南[翻译]-和Spring的集成

阅读更多

 

1.1.1           Spring的集成

 

Unitils 也提供了对Spring框架的支持。Sping的一个基本远侧就是你的对象应该被设计成容易测试的,即使没有Spring或者其他容器。There are times however, when it can be useful to work with object structures that are wired by the Spring container.

Unitils支持Spring的特性如下:

  • 管理ApplicationContext配置
    注入Spring beans到单元测试
    使用Hibernate SessionFactory 配置
    Spring配置中引用Unitls 数据源

1.1.1.1     ApplicationContext配置

你只需要在类,方法或者属性上用注解@SpringApplicationContext,并且指明需要的Spring配置文件,既可以容易的装载application context 。例如:

public class UserServiceTest extends UnitilsJUnit4 {
 
    @SpringApplicationContext({"spring-config.xml", "spring-test-config.xml"})
    private ApplicationContext applicationContext;
    
}
 

这样就可以装载Spring-config.xml spring-test-config.xml文件并建立新的ApplicationContext,并将会注入对应的属性。在setter方法上也可以使用注解,而不仅仅是属性上。

父类也会被扫描,检查是否有@SpringApplicationContect注解存在。如果发现的话,这些配置文件会首先被加载。
这样就可都能通过扩展的特殊配置类覆盖父类的配置。例如:

public class UserServiceTest extends UnitilsJUnit4 {
 
    @SpringApplicationContext({"spring-config.xml", "spring-test-config.xml"})
    private ApplicationContext applicationContext;
    
}
 

在上面的例子,将即哪里一个新的ApplicationContext,首先加载spring-beans.xml,然后是extra-spring-beans.xml配置。然后application context被注入到注解的属性。

注意在这个例子里,一个新的application context被建立了。这是必须的因为有扩展的配置文件被指明了。Unitils会尽量重用application context 。在下面的例子里,没有扩展的文件被加载,因为相同的appliction context实例被重用了。

@SpringApplicationContext("spring-beans.xml")
public class BaseServiceTest extends UnitilsJUnit4 {
}
 
public class UserServiceTest extends BaseServiceTest {
 
    @SpringApplicationContext
    private ApplicationContext applicationContext;     
}
 
public class UserGroupServiceTest extends BaseServiceTest {
 
    @SpringApplicationContext
    private ApplicationContext applicationContext;     
}
 

在公共的父类BaseServiceTest中指明了配置文件,ApplicationContext会被建立一次,然后被子类重用。

既然加载一次application context的操作是比较麻烦的,那么尽量重用他对你的测试性能是有很大好处的。

1.1.1.1.1    Programmatic configuration

编程式配置也是可能的,你可以注解一个方法,这个方法没有参数或者有一个List<String>作为参数,方法会返回一个ConfigrableApplicationContext的实例。If a List<String> parameter is specified, all locations of the @SpringApplicationContext annotations that would otherwise be used to create a new instance will be passed to the method.

The result of this method should be an instance of an application context for which the refresh() method was not yet invoked. This important, since it allows Unitils to perform extra configuration such as adding some BeanPostProcessors, which is no longer possible once refresh is invoked. In case of aClassPathXmlApplicationContext this can easily be achieved by passing false as value for the refresh parameter of the constructor:

@SpringApplicationContext
public ConfigurableApplicationContext createApplicationContext(List<String> locations) {
    return new ClassPathXmlApplicationContext(Arrays.asList(locations), false);
}
 
@SpringApplicationContext
public ConfigurableApplicationContext createApplicationContext() {
    return new ClassPathXmlApplicationContext(Arrays.asList("spring-beans.xml","extra-spring-beans.xml"), false);
}
 

1.1.1.2   Injection of Spring beans

Once you've configured an ApplicationContext, Spring beans are injected into fields / setters annotated with @SpringBean, @SpringBeanByType or@SpringBeanByName. Following example shows 3 ways to get a UserService bean instance from the application context:

Spring bean的注入

一旦你配置了application context,Spring bean 会注入到那些使用了@springBean@SpringBeanByType或者@SpringBeanByName的方法属性中,下面例子展现了3中从application context中去的UserService Bean的方式。

@SpringBean("userService")
private UserService userService;
 
@SpringBeanByName
private UserService userService;
 
@SpringBeanByType
private UserService userService;
 

使用@SpringBean,你会从Application Context中得到一个名字严格匹配的Bean@SpringBeanByName有相同的效果,但是现在字段的名字被用作唯一的标识。

如果使用@SpringBeanByType,则会依据字段的类型查找application context 。这种情况下,这可都能是UserService类或者他的子类。如果没有查到,或者查到多个结果,系统会抛出异常。

The same annotations can be used on setter methods. For example:

@SpringBeanByType
public void setUserService(UserService userService) {
    this.userService = userService;
}
 

1.1.1.3     配置测试数据库

在数据库测试单元我们展示怎么为你的测试获得并安装一个数据源。使用hibernate测试单元描述怎么为你的测试配置hibernate.spring中,这些通常被放在spring的配置文件。加入你的application容易使用了如下类似的文件application-config.xml:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:hsql://localhost/sample"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
</bean>
 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">   
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>org.unitils.sample.User</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <value>
            hibernate.dialect=org.hibernate.dialect.HSQLDialect
            hibernate.show_sql=true
        </value>
    </property>
</bean>
 

第一个bean定义了链接应用数据库的数据源,第二个bean配置了hibernate SessionFactory 并使用上面的数据源。

如果我们的测试里需要连接数据库,通常一个测试用的spring配置文件会像下面的内容一样:

<bean id="dataSource" class="org.unitils.database.UnitilsDataSourceFactoryBean" />
 

With this configuration, Spring will make use of the DataSource configured in Unitils. Refer to the configuration chapter for more information on how to configure a test DataSource.

Unitils automatically detects the SessionFactory configured in Spring: all integration features Unitils offers for Hibernate also work when using Spring. Thehibernate mapping test will therefore also work as follows:

对于这个配置,Srping会只用Unitils中配置的数据源。可以参考 the configuration chapter查找更多信息来查看怎么配置一个测试数据源。

Unitils自动探测Spring中配置的SessionFactoryUnitils提供的所有集成hibernate的特性也可以使用在Springhibernate mapping test 因此也可以如下配置:

@SpringApplicationContext({"application-config.xml", "test-ds-config.xml"})
public class HibernateMappingTest extends UnitilsJUnit4 {
    
    @Test
    public void testMappingToDatabase() {
        HibernateUnitils.assertMappingWithDatabaseConsistent();
    }
}
 

 

分享到:
评论

相关推荐

    Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南》.zip

    Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南》 Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南》 Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南...

    mybatis--Spring集成nybatis.rar

    在IT行业中,MyBatis和Spring的集成是一个常见的任务,特别是在构建基于Java的企业级应用时。"mybatis--Spring集成nybatis.rar"这个压缩包文件很可能是为了教授如何将MyBatis ORM框架与Spring框架结合使用的教程。...

    unitils-3.3-with-dependencies.zip

    这个压缩包包含了运行和使用Unitils所需的所有组件,使得开发者无需单独下载和管理各个依赖。 Unitils框架的核心特点包括: 1. **数据库支持**:它提供了自动配置数据库连接,支持多种数据库(如MySQL, Oracle, ...

    fastdfs - spring mvc 集成

    java 集成 fastdfs - spring mvc 集成 java 集成 fastdfs - spring mvc 集成 java 集成 fastdfs - spring mvc 集成 java 集成 fastdfs - spring mvc 集成 java 集成 fastdfs - spring mvc 集成

    spring-redis-test---spring redis集成

    spring和redis集成有很多方式,看到网上很多都是使用redistemplate自己去做redis 的一些操作,但是对于我们开发来说,肯定是使用越方便越好,于是乎就有了spring的对redis或者memcahe这些换成框架的封装,只需要引入...

    Spring-Boot-Reference-Guide, Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南》.zip

    综上,《Spring Boot参考指南》覆盖了Spring Boot的各个方面,无论是初学者还是经验丰富的开发者,都能从中受益匪浅,快速掌握Spring Boot的使用技巧和最佳实践。这份中文翻译版本的出现,无疑为国内的Spring Boot...

    springfox-spring-web-2.9.2-API文档-中文版.zip

    赠送jar包:springfox-spring-web-2.9.2.jar; 赠送原API文档:springfox-spring-web-2.9.2-javadoc.jar; 赠送源代码:springfox-spring...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    毕设 外文文献翻译--Spring的web-MVC-构架模式

    Spring框架的设计目的是简化企业级应用的开发,提供了一整套的解决方案,包括但不限于依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问/集成以及Web应用开发等。本文主要关注Spring框架中的Web MVC架构模式...

    mybatis-spring-2.0.0-API文档-中文版.zip

    赠送jar包:mybatis-spring-2.0.0.jar; 赠送原API文档:mybatis-spring-2.0.0-javadoc.jar; 赠送源代码:mybatis-spring-2.0.0-sources...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    oss-spring-boot-starter-1.0.3-API文档-中文版.zip

    赠送jar包:oss-spring-boot-starter-1.0.3.jar 赠送原API文档:oss-spring-boot-starter-1.0.3-javadoc.jar 赠送源代码:oss-spring-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南》

    Spring Boot Reference Guide中文翻译,详细的中文spring boot中文文档,包含快速创建spring boot demo,与maven的结合使用等;各类注解的使用,以及服务器的部署等等……

    spring-boot spring-security-oauth2 完整demo

    总的来说,这个“spring-boot spring-security-oauth2 完整demo”为学习和实践Spring Boot、Spring Security与OAuth2的结合提供了宝贵的参考。通过深入理解和实践这个示例,开发者不仅可以掌握这三大框架的基本用法...

    mybatis-spring集成

    在集成时,需要在类路径中包含mybatis-spring-x.x.x.jar文件,如果是使用Maven进行项目管理,需要在pom.xml中添加相应的依赖。 在MyBatis-Spring集成中,通常需要在Spring应用上下文中定义至少两个关键组件:...

    mybatis-spring-1.3.1.jar下载

    6. **与Spring Data集成**:虽然MyBatis-Spring主要是为MyBatis和Spring的集成设计的,但也可以与Spring Data JPA等其他数据访问技术配合使用,提供更加丰富的数据访问选项。 与MyBatis-3.4.4的配合使用: 1. **...

    Thrift-server与spring集成

    集成Thrift和Spring的主要目的是为了利用Spring的依赖注入(DI)和面向切面编程(AOP)特性,简化服务的配置和管理。以下是一些关键知识点: 1. **Thrift IDL(接口定义语言)**: - Thrift通过IDL文件定义服务...

    thymeleaf-spring5-3.0.12.RELEASE-API文档-中文版.zip

    赠送jar包:thymeleaf-spring5-3.0.12.RELEASE.jar; 赠送原API文档:thymeleaf-spring5-3.0.12.RELEASE-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    spring-boot-security-saml, Spring Security saml与 Spring Boot的集成.zip

    spring-boot-security-saml, Spring Security saml与 Spring Boot的集成 spring-boot-security-saml这个项目在处理 spring-security-saml 和 Spring Boot 之间的平滑集成的同时,在处理内部的配置的gritty和锅炉板的...

    thymeleaf-spring5-3.0.14.RELEASE-API文档-中文版.zip

    赠送jar包:thymeleaf-spring5-3.0.14.RELEASE.jar 赠送原API文档:thymeleaf-spring5-3.0.14.RELEASE-javadoc.jar ...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    SpringBoot-SpringSecurity集成

    自定义异常处理是Spring Security集成中的一个重要部分,可以捕获并处理未授权(`AccessDeniedException`)和未认证(`AuthenticationException`)异常。 9. **CSRF防护**: Spring Security默认开启CSRF(跨站...

    logback-ext-spring-0.1.1

    logback与spring集成的文件,从官网上找的。上传的文件包括源文件和jar包,以下是连接: https://github.com/qos-ch/logback-extensions/wiki/Spring ...

Global site tag (gtag.js) - Google Analytics