`
sundful
  • 浏览: 1251096 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

gienah-testing

阅读更多

SpringRunner

   

   地址:http://code.google.com/p/gienah-testing/

    gienah-testing项目主要包含2个Junit4的运行类: springrunner和springtransactionalrunner 。springrunner负责访问主要项目特性的引擎:bean注入。Springtransactionalrunner继承于springrunner ,允许有标记的事务测试在测试完成时将回滚到测试发生前。
     使用这些类,你需要在您的测试类中标记JUnit 4的@ runwith。此外,您必须使用gienah-testing的@Configuration标记来指定Spring的配置文件。看看下面的例子:

Java代码 复制代码
  1. @RunWith(value = SpringRunner.class)   
  2. @Configuration(locations = {"resources/spring/spring-beans.xml"})   
  3. public class TestUserService {   
  4.   
  5.     @Test public void someTestMethod() {    
  6.         ...   
  7.     }   
  8.   
  9.     ...   
  10. }  
@RunWith(value = SpringRunner.class)
@Configuration(locations = {"resources/spring/spring-beans.xml"})
public class TestUserService {

    @Test public void someTestMethod() { 
        ...
    }

    ...
}



    我们现在为业务类写一个测试类,请留意@Configuration标记,你可以使用locations属性来指定spring配置文件的路径,将会获取到spring的上下文.还可以以其它方式来使用@Configuration标记, 但这些将经过审查后再补上。
现在,将通过配置运行类来获取变量,请留意下面的例子:

Java代码 复制代码
  1. @RunWith(value = SpringRunner.class)   
  2. @Configuration(locations = {"resources/spring/spring-beans.xml"})   
  3. public class TestUserService {   
  4.     
  5.     @Dependency  
  6.     private SomeBean someBean;   
  7.   
  8.     @Test    
  9.     public void someTestMethod() {    
  10.        Assert.assertNotNull(this.someBean);   
  11.     }   
  12.   
  13. }  
@RunWith(value = SpringRunner.class)
@Configuration(locations = {"resources/spring/spring-beans.xml"})
public class TestUserService {
 
    @Dependency
    private SomeBean someBean;

    @Test 
    public void someTestMethod() { 
       Assert.assertNotNull(this.someBean);
    }

}


使用@Dependency标记可以使我们有效地使配置文件中bean的”somebean”注入到我们的测试类中,因此字段将会以实例的方式出现在我们的代码中,那么,运行类将查找spring上下文中相对应的指定的bean名称的bean,如果你想装载一个bean使用不同的名称,你可以利用@Dependency标记来为它指定”bean”属性.
    另外介绍的特性就是允许使用测试标记在测试完成后使事务自动回滚到测试前。例如,下面的示例:

Java代码 复制代码
  1. @RunWith(value = SpringRunner.class)   
  2. @Configuration(locations = {"resources/spring/spring-beans.xml"})   
  3. public class TestUserService {   
  4.     @Test    
  5.     @Transactional     
  6.     public void someTestMethod() {    
  7.        // doing some database stuff here...   
  8.     }   
  9.     @Test    
  10.     public void someOtherTestMethod() {    
  11.        // doing some database stuff here...   
  12.     }   
  13. }  
@RunWith(value = SpringRunner.class)
@Configuration(locations = {"resources/spring/spring-beans.xml"})
public class TestUserService {
    @Test 
    @Transactional  
    public void someTestMethod() { 
       // doing some database stuff here...
    }
    @Test 
    public void someOtherTestMethod() { 
       // doing some database stuff here...
    }
}


    "someTestMethod"方法以事务的方式执行,而"someOtherTestMethod"方法则不会。当"someTestMethod"方法执行完后,事务将使数据库状态回滚到未执行前,你也可以使全部测试类都标记@Transactional属性,所有的测试方法都将在事务中执行

配置spring上下文
在前面的话题中,你在执行中见到@Configuration标记。这个标记有三个属性:locations, provider和loader,下面让我们看看如何去使用它们:
   •locations(可选择):使用这个属性你可以使用指定的spring配置文件来生成spring上下文
    •provider(可选择):使用这个属性允许你指定一个类同样可以使用@Configuration标记去指定locations的属性,这里允许一个特许的locations说明在一个测试类套件中
    •loader(可选择):这个属性允许你去指定IcontextLoader的实现并去使用它构成spring上下文.一般情况使用默认配置已经足够.

    @Configuration标记至少指定locations或者provider其中一个属性,如果没有它们其中的一个,将会使JUnit 4显示出一个error.让我们去看看提供的属性在执行中的实例:

Java代码 复制代码
  1. @RunWith(value = SpringRunner.class)   
  2. @Configuration(locations = {"resources/spring/spring-beans.xml"})   
  3. public class Test1 {   
  4.    ...   
  5.      
  6. }    
  7. @RunWith(value = SpringRunner.class)   
  8. @Configuration(provider = Test1.class)   
  9. public class Test2 {   
  10.    ...   
  11. }   
  12. @RunWith(value = SpringRunner.class)   
  13. @Configuration(provider = Test2.class)   
  14. public class Test3 {   
  15.    ...    
  16. }  
@RunWith(value = SpringRunner.class)
@Configuration(locations = {"resources/spring/spring-beans.xml"})
public class Test1 {
   ...
  
} 
@RunWith(value = SpringRunner.class)
@Configuration(provider = Test1.class)
public class Test2 {
   ...
}
@RunWith(value = SpringRunner.class)
@Configuration(provider = Test2.class)
public class Test3 {
   ... 
}


    注意怎样去构造est3从Test2到Test1经过的流程.这个方式(通过路径获取获取配置)是不平常和不受欢迎的,但我想说明一下这个表现.

访问spring上下文
最后,也可以直接获取spring上下文,如果这样,你应该在你的测试中创建一个局部变量和写上一个@Context标记:

Java代码 复制代码
  1. @RunWith(value = SpringRunner.class)   
  2. @Configuration(locations = {"resources/spring/spring-beans.xml"})   
  3. public class TestUserService {   
  4.     @Context  
  5.     private ConfigurableApplicationContext context;    
  6.     @Test    
  7.     public void someTestMethod() {    
  8.        SomeBean someBean = context.getBean("someBean");   
  9.        ...    
  10.     }   
  11. }  
@RunWith(value = SpringRunner.class)
@Configuration(locations = {"resources/spring/spring-beans.xml"})
public class TestUserService {
    @Context
    private ConfigurableApplicationContext context; 
    @Test 
    public void someTestMethod() { 
       SomeBean someBean = context.getBean("someBean");
       ... 
    }
}


当这样做时,运行类将可以使spring上下文将会自动地注入到你的测试类中,然后你也可以访问它.

配置文件解释
EO.2版本改变了单元测试类的配置,以springXML配置文件的方式填写.因此, 该项目引进一个新的标签:gienah.
在gienah架构下使用标签,你必须在你的springXML配置文件的头部导入声明,
The emboldened text in the XML sample below represents the additions you must add to get access to the tags contained in the gienah namespaces.

Xml代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans    
  3.        xmlns="http://www.springframework.org/schema/beans"  
  4.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.        xmlns:gienah="http://www.springframework.org/schema/gienah"  
  6.        xsi:schemaLocation="   
  7.        http://www.springframework.org/schema/beans                    
  8.        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
  9.        http://www.springframework.org/schema/gienah   
  10.        http://www.springframework.org/schema/gienah/gienah.xsd">  
  11.     ...    
  12. </beans>  
  13.   
  14. <gienah:test />  
<?xml version="1.0" encoding="UTF-8"?>
<beans 
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:gienah="http://www.springframework.org/schema/gienah"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans                 
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/gienah
       http://www.springframework.org/schema/gienah/gienah.xsd">
    ... 
</beans>

<gienah:test />

标签
这个标签在springXML配置文件中定义一个测试类,看下面的例子去了解通常的情况:

Xml代码 复制代码
  1. <gienah:test class="org.myproject.test.TestSample1" transactional="true">  
  2.     <gienah:dependency property="someBean1" bean="someBean" />  
  3.     <gienah:context property="applicationContext" />  
  4.     <gienah:method name="testSomething" transactional="true" ignore="false" />  
  5. </gienah:test>  
<gienah:test class="org.myproject.test.TestSample1" transactional="true">
    <gienah:dependency property="someBean1" bean="someBean" />
    <gienah:context property="applicationContext" />
    <gienah:method name="testSomething" transactional="true" ignore="false" />
</gienah:test>


This approach is equals to mark the someBean1 class attribute with the @Dependency annotation. Latest, using the <gienah:context /> tag you can inject the application context to the Test class.

   上述实例在配置文件中把一个测试类命名为TestSample1,它指定了在"testSomething"方法中将支持事务,而其它方法即不运行在同一个事务中(查看主事务属性和<gienah:method />标签),另一个有趣的事情是使用<gienah:dependency />可以定义要注入的bean,这样基本上等同于使用@Dependency标记来标注someBean1类属性,最后,使用<gienah:context />标签你可以在测试类中注入应用上下文

分享到:
评论

相关推荐

    Spring in Action(第二版 中文高清版).part2

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 ...B.3.4 使用Gienah Testing在JUnit 4中进行测试 B.4 小结

    Spring in Action(第二版 中文高清版).part1

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 ...B.3.4 使用Gienah Testing在JUnit 4中进行测试 B.4 小结

    基于Springboot的实验报告系统源码数据库文档.zip

    基于Springboot的实验报告系统源码数据库文档.zip

    ERA5_Climate_Single_Month.txt

    GEE训练教程——Landsat5、8和Sentinel-2、DEM和各2哦想指数下载

    基于springboot智能健康饮食系统源码数据库文档.zip

    基于springboot智能健康饮食系统源码数据库文档.zip

    基于SpringBoot的校园服务系统源码数据库文档.zip

    基于SpringBoot的校园服务系统源码数据库文档.zip

    史上最全IXIA测试仪配置使用指导手册(含IxNetwork,图文并茂超详细!).zip

    内容概要: IXIA测试仪的基本配置.doc ixia测试仪基础使用示例.doc IxNetwork如何进行抓包回放-V1.0.pdf IxNetwork如何自定义报文-V2.0.pdf ixia构造ip分片方法.txt IxNetwork使用简介.pdf 适用人群:网络协议造包、打流相关的测试工程技术人员,想要学习的同学可以下载哈 使用场景:构造pcap包,打流 Ixia简介 IXIA使用的是Server-client模式,Server端在测试仪表的主机上,在开机后会随着主机内的操作系统的启动而自动启动,一般情况下不需要人为的手工启动。因此在通常不需要为主机配置专用的显示器和键盘。 client端包括两个测试软件: Ixia Explorer和ScriptMate。这两个软件一般安装在测试用计算机上,在仪表自带的主机中也有这两个软件。根据测试项目的不同来选择使用不同的软件。Ixia Explorer主要提供数据流的测试,针对设备的功能进行测试; ScriptMate提供各种性能测试窗口,针对设备的性能进行测试。 Auto:自动分配;

    基于Python+Django花卉商城系统源码数据库文档.zip

    基于Python+Django花卉商城系统源码数据库文档.zip

    Umi-OCR-main.zip

    Umi-OCR-main.zip

    微信小程序源码-促销抽奖.zip

    基于微信小程序开发的促销抽奖小工具源码,适用于初学者了解小程序开发过程以及简单抽奖工具的实现。

    Sen2_median.txt

    GEE训练教程——Landsat5、8和Sentinel-2、DEM和各2哦想指数下载

    springboot的概要介绍与分析

    以下是一个关于Spring Boot设计的资源描述及项目源码的简要概述: Spring Boot设计资源描述 Spring Boot是一个为基于Spring的应用提供快速开发工具的框架,其设计旨在简化Spring应用的初始搭建和开发过程。以下是一些关键资源: Spring Boot官方文档:详细阐述了Spring Boot的核心特性、自动配置原理、起步依赖、内嵌式服务器等关键概念。这是学习和掌握Spring Boot设计的首选资源。 在线教程与视频:各大在线教育平台提供了丰富的Spring Boot教程和视频课程,从基础入门到高级应用,帮助开发者全面了解和掌握Spring Boot设计。 书籍与电子资料:许多技术书籍和在线电子资料深入讲解了Spring Boot的设计原理、最佳实践和项目案例,为开发者提供了宝贵的学习资源。 项目源码示例 以下是一个简单的Spring Boot项目源码示例,用于演示Spring Boot的基本结构和自动配置功能: java // 引入Spring Boot依赖 @SpringBootApplication public class MySpri

    基于springboot美妆领域管理系统源码数据库文档.zip

    基于springboot美妆领域管理系统源码数据库文档.zip

    tables-3.7.0+gpl-cp37-cp37m-win_amd64.whl

    tables-3.7.0+gpl-cp37-cp37m-win_amd64.whl

    算法实现的概要介绍与分析

    算法是计算机科学的核心,它们在解决各种问题时发挥着关键作用。一个好的算法不仅可以提高程序的效率,还可以简化复杂的问题。下面我将通过一个具体的例子——快速排序算法(Quick Sort)——来展示算法的实现过程,包括资源描述和项目源码。 ### 快速排序算法简介 快速排序是一种高效的排序算法,采用分治法的思想。其基本步骤如下: 1. 从数列中挑出一个元素,称为“基准”(pivot)。 2. 重新排序数列,所有比基准值小的元素放到基准前面,所有比基准值大的元素放到基准后面(相同的数可以到任一边)。在这个分割结束之后,该基准就处于数列的中间位置。这个称为分割(partition)操作。 3. 递归地(recursive)把小于基准值的子数列和大于基准值的子数列排序。 ### 资源描述 快速排序算法因其高效性和简洁性,在实际应用中非常受欢迎。它的时间复杂度平均为 O(n log n),最坏情况下为 O(n^2),但这种情况很少发生。快速排序的空间复杂度为 O(log n),因为它使用了递归来实现。 快速排序的一个典型应用场景是在数据库系统中对大量数据进行排序。由于它的高效性,快速排序

    基于springboot农场投入品运营线上管理系统源码数据库文档.zip

    基于springboot农场投入品运营线上管理系统源码数据库文档.zip

    基于springboot个性化影院推荐系统源码数据库文档.zip

    基于springboot个性化影院推荐系统源码数据库文档.zip

    linux基础进阶笔记

    linux基础进阶笔记,配套视频:https://www.bilibili.com/list/474327672?sid=4493093&spm_id_from=333.999.0.0&desc=1

    微信自动抢红包动态库.zip程序资源学习资料参考

    小程序 微信自动抢红包动态库.zip程序资源学习资料参考

    iOS版微信抢红包插件(支持后台抢红包).zip

    小程序 iOS版微信抢红包插件(支持后台抢红包).zip

Global site tag (gtag.js) - Google Analytics