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

    ysoserial-master.zip

    ysoserial是一个用于生成利用不安全的Java对象反序列化的有效负载的概念验证工具。它包含一系列在常见Java库中发现的"gadget chains",可以在特定条件下利用执行不安全的反序列化操作的Java应用程序。ysoserial项目最初在2015年AppSecCali会议上提出,包含针对Apache Commons Collections(3.x和4.x版本)、Spring Beans/Core(4.x版本)和Groovy(2.3.x版本)的利用链

    zigbee CC2530无线自组网协议栈系统代码实现协调器与终端的TI Sensor实验和Monitor使用.zip

    1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用IAR软件开发,当前在CC2530上运行,如果是其他型号芯片,请自行移植。 3、软件下载时,请注意接上硬件,并确认烧录器连接正常。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、例程具有一定专业性,非专业人士请谨慎操作。

    YOLO算法-自卸卡车-挖掘机-轮式装载机数据集-2644张图像带标签-自卸卡车-挖掘机-轮式装载机.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    Oracle10gDBA学习手册中文PDF清晰版最新版本

    **Oracle 10g DBA学习手册:安装Oracle和构建数据库** **目的:** 本章节旨在指导您完成Oracle数据库软件的安装和数据库的创建。您将通过Oracle Universal Installer (OUI)了解软件安装过程,并学习如何利用Database Configuration Assistant (DBCA)创建附加数据库。 **主题概览:** 1. 利用Oracle Universal Installer (OUI)安装软件 2. 利用Database Configuration Assistant (DBCA)创建数据库 **第2章:Oracle软件的安装与数据库构建** **Oracle Universal Installer (OUI)的运用:** Oracle Universal Installer (OUI)是一个图形用户界面(GUI)工具,它允许您查看、安装和卸载机器上的Oracle软件。通过OUI,您可以轻松地管理Oracle软件的安装和维护。 **安装步骤:** 以下是使用OUI安装Oracle软件并创建数据库的具体步骤:

    消防验收过程服务--现场记录表.doc

    消防验收过程服务--现场记录表.doc

    (4655036)数据库 管理与应用 期末考试题 数据库试题

    数据库管理\09-10年第1学期数据库期末考试试卷A(改卷参考).doc。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    YOLO算法-瓶纸盒合并数据集-3161张图像带标签-纸张-纸箱-瓶子.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    职业暴露后的处理流程.docx

    职业暴露后的处理流程.docx

    Java Web开发短消息系统

    Java Web开发短消息系统

    java毕设项目之ssm基于java和mysql的多角色学生管理系统+jsp(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7

    批量导出多项目核心目录工具

    这是一款可以配置过滤目录及过滤的文件后缀的工具,并且支持多个项目同时输出导出,并过滤指定不需要导出的目录及文件后缀。 导出后将会保留原有的路径,并在新的文件夹中体现。

    【图像压缩】基于matlab GUI DCT图像压缩(含MAX MED MIN NONE)【含Matlab源码 9946期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    YOLO算法-挖掘机与火焰数据集-7735张图像带标签-挖掘机.zip

    YOLO算法-挖掘机与火焰数据集-7735张图像带标签-挖掘机.zip

    操作系统实验 Ucore lab5

    操作系统实验 Ucore lab5

    IMG_5950.jpg

    IMG_5950.jpg

    竞选报价评分表.docx

    竞选报价评分表.docx

    java系统,mysql、springboot等框架

    java系统,mysql、springboot等框架

    zigbee CC2530网关+4节点无线通讯实现温湿度、光敏、LED、继电器等传感节点数据的采集上传,网关通过ESP8266上传远程服务器及下发控制.zip

    1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用IAR软件开发,当前在CC2530上运行,如果是其他型号芯片,请自行移植。 3、软件下载时,请注意接上硬件,并确认烧录器连接正常。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、例程具有一定专业性,非专业人士请谨慎操作。

Global site tag (gtag.js) - Google Analytics