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

    node-v5.1.1-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于Android+Java的 AES 加密算法分析.zip

    Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

    Visio卷积神经网络(CNN)结构图模板:专业设计资源下载

    Visio卷积神经网络(CNN)结构图模板是一个专为深度学习和人工智能领域设计的绘图工具。该模板提供了一套完整的预制图形和符号,包括卷积层、池化层、全连接层、激活函数等,使得用户能够快速构建和自定义复杂的神经网络架构。通过这个模板,研究人员和工程师可以更加直观和高效地展示和分享他们的模型设计。它适用于学术论文、技术报告、项目演示等多种场合。该资源还包括易于编辑的图层和格式,允许用户根据需要调整网络的每个部分。此外,Visio的拖放功能和自动化特性大大简化了绘图过程,使得即使是初学者也能轻松创建专业的CNN结构图。

    2024-2030中国粉尘环境在线监测报警系统市场现状研究分析与发展前景预测报告.docx

    2024-2030中国粉尘环境在线监测报警系统市场现状研究分析与发展前景预测报告

    基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip

    基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip 基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip基于 SpringCloud 和 Vue3 的OA系统源码+数据库.zip

    VIO初始化其实不难,看完这篇你就懂了

    VIO初始化其实不难,看完这篇你就懂了

    地毯纱线,全球前19强生产商排名及市场份额.docx

    地毯纱线,全球前19强生产商排名及市场份额.docx

    78-78.渗透测试-msfconsole漏洞利用流程下.mp4

    78-78.渗透测试-msfconsole漏洞利用流程下.mp4

    Java毕业设计-基于SSM框架的游戏资源管理系统(源码+演示视频+说明).rar

    Java毕业设计-基于SSM框架的游戏资源管理系统(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:535】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 本次开发的游戏资源管理系统实现了字典管理、论坛管理、攻略管理、留言版管理、物品管理、用户管理、资讯信息管理、管理员管理等功能。

    node-v4.7.0-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v5.7.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    tensorflow-gpu-2.5.3-cp39-cp39-manylinux2010-x86-64.whl

    resnet

    海尔数字化虚拟工厂项目总结qy.pptx

    海尔数字化虚拟工厂项目总结qy.pptx

    77-77.渗透测试-msfconsole漏洞利用流程上.mp4

    77-77.渗透测试-msfconsole漏洞利用流程上.mp4

    node-v4.8.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    AndroidMediaPlayer By VLC(基于VLC的Android媒体播放器).zip

    Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

    机器学习的数据预处理模块(二):主成分分析

    机器学习的数据预处理模块(二):主成分分析

    node-v4.8.1-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics