`
sundful
  • 浏览: 1251225 次
  • 性别: 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 小结

    解压软件 ZArchiver.apk

    解压软件 ZArchiver.apk

    毕设项目:基于SSM框架+mysql开发的教务管理系统分前后台【附含源码+数据库+毕业论文】

    二、技术实现 后端:spring,springmvc,mybatis,mysql 前端采用:vue,css 运行环境及开发工具:jdk8,idea或者eclipse,Navicat 三、系统功能 系统登录角色分为:管理员、老师、学生 用户登录 用户注册 首页 个人中心 修改密码 个人信息 班级管理 成绩类型管理 公告类型管理 教程类型管理 第几节管理 院系管理 职称管理 专业管理 公告管理 课程管理 成绩管理等功能

    设计和仿真一个用于控制双质量弹簧阻尼系统位移的多变量控制系统.docx

    设计和仿真一个用于控制双质量弹簧阻尼系统位移的多变量控制系统.docx

    1-全国各地级市金融机构本外币与人民币存款和贷款2010-2020年-社科数据.zip

    这份数据集详细记录了2010至2020年间中国各城市金融机构的本外币存款和人民币贷款情况。数据涵盖了商业银行、农村合作银行、信用社等多种金融机构的存款数据,包括本币和外币存款情况。这些数据不仅反映了各城市金融机构的存款规模,也为分析金融市场的发展趋势、资金流动状况及城市经济活动提供了重要视角。数据来源于中国区域统计年鉴和各省市统计年鉴,以面板数据形式呈现,包含1948个样本。通过这些数据,金融机构、政策制定者、研究人员和投资者可以深入了解各城市的金融市场格局,辅助做出更准确的决策和分析。

    开发一个带有 PCIe Endpoint 设备的驱动程序并实现热插拔功能.docx

    开发一个带有 PCIe Endpoint 设备的驱动程序并实现热插拔功能

    NovaMaker-2.4.29-win-64-bit.zip

    NovaMaker-2.4.29-win-64-bit.zip

    Spring Boot相关的资源.txt

    Spring Boot相关的资源.txt

    Hive简易操作入门中文最新版本

    本文档主要讲述的是Hive简易操作入门;本流程中以putty为例,如果使用别的SSH客户端,界面上会不同,基本过程相似。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

    ASP+ACCESS软件信息发布系统设计(源代码+论文+开题报告+任务书+答辩PPT)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    浅析Sybase数据库系统性能调优中文最新版本

    本文档主要讲述的是浅析Sybase数据库系统性能调优;性能调优”是对应用程序的性能优化。SYBASE数据库“性能调优”的主要目的是减少对系统公共资源的争用。对sybase数据库系统的性能进行优化,是一项长期且受诸多因素影响的工作,希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

    用VBS制作自己的进度条

    用VBS制作自己的进度条

    校际运动会管理系统程序设计基础课程设计报告.doc

    校际运动会管理系统程序设计基础课程设计报告.doc

    ORACLECRS日常维护命令中文最新版本

    本文档主要讲述的是ORACLE CRS日常维护命令;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

    [net毕业设计]ASP.NET教务信息管理系统的设计与实现(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    1-全国各省商品市场分割指数相对价格法计算过程+计算结果2000-2020年-社科数据.zip

    全国各省商品市场分割指数相对价格法的计算过程和结果数据集提供了2000至2020年间中国各省份市场分割的量化分析。该数据集基于12大类商品,包括粮食、纺织品、服装鞋帽等,利用地区间商品价格差异来分析市场分割状况。核心计算方法为相对价格法,通过比较不同地区同一商品的价格指数,来衡量市场分割程度。数据集包含原始数据、计算过程和最终结果,原始数据主要来源于统计年鉴中的商品价格指数。计算步骤包括计算历年资本边际产出比值、求均值、方差等,最终得出资本市场一体化程度。该数据集为研究中国国内市场一体化进程提供了重要参考。

    1-全国上市公司绿色投资者原始数据+计算代码+参考文献2008-2022年-社科数据.zip

    全国上市公司绿色投资者数据集(2008-2022年)提供了中国上市公司在环保和可持续发展方面的资金吸引力的详细视角。该数据集涵盖了股票代码、年份、会计年度、股票简称、STPT标识、行业名称及代码,以及绿色投资者数量等关键指标。它记录了超过42,000个观测值,涉及4,700多家样本企业,为投资者、金融分析师、政策制定者和环境研究者提供了评估企业环保表现、理解绿色投资趋势以及制定相关策略的辅助工具。数据集包括是否有绿色投资者的虚拟变量,以及绿色投资者数目加1的自然对数两个指标,可以用于衡量企业绿色治理情况。这些数据不仅展示了中国上市公司在环境保护方面的资金流向,也反映了投资者对绿色投资的关注动态,对于研究绿色投资与企业行为的关系提供了宝贵的实证数据支持。

    15da2b5d3ceeddc8af2f6a7eed26d7e0.JPG

    15da2b5d3ceeddc8af2f6a7eed26d7e0.JPG

    前端工程化实践课程下载

    视频课程下载——前端工程化实践

Global site tag (gtag.js) - Google Analytics