`
wan_2004
  • 浏览: 140564 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

seam 中的testNG测试框架

    博客分类:
  • seam
阅读更多
seam的testNG我就不多说了,文档里面有

我在这里想说的是文档里面没有说清楚的和我得出的一些经验,希望对大家有所帮助

    首先我想说我这里都是集成测试,集成测试是什么测试呢,按照文档里面的说法,就是用j2se模拟j2ee服务器的应用环境然后在模拟浏览器发出请求或客户段的操作,最后在是断言它的返回值是不是你预期的返回值,是则通过,否则失败。(所以tomcat上用seam的也可以用testNG做测试,但是需要自己配置一下classpath)
    下面来看看一个例子
public class RegisterTest extends SeamTest
{

   @Test
   public void testRegister() throws Exception
   {

      new FacesRequest("/register.xhtml") {//模拟浏览器发出一次FacesRequest(其实就是一次jsf的页面提交,GetRequest()就是普通的访问)
         /*
            这是一次典型的JSF 请求
            下面各个方法就是JSF的各个生命周期,如果不懂就看看JSF的自定义组件
         */
         @Override
         protected void processValidations() throws Exception
         {
            validateValue("#{user.username}", "1ovthafew");
            validateValue("#{user.name}", "Gavin King");
            validateValue("#{user.password}", "secret");
            assert !isValidationFailure();
         }

         @Override
         protected void updateModelValues() throws Exception
         {
            setValue("#{user.username}", "1ovthafew");
            setValue("#{user.name}", "Gavin King");
            setValue("#{user.password}", "secret");
         }

         @Override
         protected void invokeApplication()
         {
            assert invokeMethod("#{register.register}").equals("success");
         }

         @Override
         protected void renderResponse()
         {
            assert getValue("#{user.username}").equals("1ovthafew");
            assert getValue("#{user.name}").equals("Gavin King");
            assert getValue("#{user.password}").equals("secret");
         }

      }.run();

   }

   ...

}

上面是一个典型的测试代码
但是有时我们的应用是有安全机制的,如果上面的Action有安全限制怎么办呢?比如我们的应用有用户机制,执行Action的时候需要登陆或是其他权限呢?
我这里介绍一种方法
import org.jboss.seam.mock.SeamTest;

import org.testng.annotations.Test;

public class AddItemActionTest extends SeamTest{
	
	@Test
	public void AddItemAction() throws Exception{
		
		String id=new FacesRequest(){//执行登陆操作然后,他会返回一个id相当与一个http session的标示
			protected void invokeApplication(){
			
			setValue("#{identity.username}", "superadmin");
	        setValue("#{identity.password}", "superadmin");
	        invokeMethod("#{identity.login}");
	        assert getValue("#{identity.loggedIn}").equals(true);
			}
		}.run();
		new FacesRequest("/admin/manageitem.xhtml",id){//再在测试时使用这个id这样权限问题就可以自由控制了
					 protected void processValidations() throws Exception
				     {
				       this.
				        validateValue("#{additem.item.name}", "test");
				        /*validateValue("#{query.item.superitem}", null);
				        validateValue("#{query.item.users}",null);
				        validateValue("#{guery.item.subitem}",null);
				        */
				        assert !isValidationFailure();
				     }

				     @Override
				     protected void updateModelValues() throws Exception
				     {
				        super.updateModelValues();
				        
				        setValue("#{additem.item.name}","test");
				        /*setValue("#{register.user.name}", "lxinblog");
				        setValue("#{register.user.password}", "123456");
				        setValue("#{register.user.email}","lxwan2354@kaass.com");
				        setValue("#{register.user.nickname}","lx");
				        */
				     }

				     @Override
				     protected void invokeApplication()
				     {
				        assert invokeMethod("#{additem.addItem}")==null;
				     }

				     @Override
				     protected void renderResponse()
				     {
				       
				        assert getValue("#{additem.item.name}").equals("test");
				        assert getValue("#{additem.item.id}")!=null;
				     }

		}.run();
			
		
	}

}

以上都是我得出的经验如有不对请指正
分享到:
评论
6 楼 wan_2004 2009-01-21  
dearshor 写道

wan_2004 写道聚合测试的意图 不就是 把东东都放到一起的测了吗??我以为不然,it代表integration test,应翻译为“集成测试”,而非“聚合测试”。“集成测试”者,即放到容器(or 运行环境)中,结合容器环境来测试(利用容器提供的资源,依赖注入能力等)。绝非你所谓的“聚合测试”:“把东东都放到一起的测了”。

对于 drools 你还有什么办法测试呢??如果知道给小弟解答下,谢谢
5 楼 dearshor 2009-01-21  
wan_2004 写道

聚合测试的意图 不就是 把东东都放到一起的测了吗??


我以为不然,it代表integration test,应翻译为“集成测试”,而非“聚合测试”。
“集成测试”者,即放到容器(or 运行环境)中,结合容器环境来测试(利用容器提供的资源,依赖注入能力等)。绝非你所谓的“聚合测试”:“把东东都放到一起的测了”。
4 楼 wan_2004 2009-01-16  
dearshor 写道

引用去掉权限等用户控制机制那你的用户权限设置怎么测试呢(drools),难道一起测了不好吗?可以专门写test suite来testing它们。每个测试应该有它明确的目的性、针对性,所以要排除其他不必要的因素的干扰,才能更好的发现问题。虽然是it,但有时候也应该用ut的思路来对待 —— 分块测试,笼而统之效果不会好的。否则还做什么it,整体部署到server上,直接人工测试、debug好了哇。

聚合测试的意图 不就是 把东东都放到一起的测了吗??
3 楼 dearshor 2009-01-15  
引用
去掉权限等用户控制机制那你的用户权限设置怎么测试呢(drools),难道一起测了不好吗?

可以专门写test suite来testing它们。每个测试应该有它明确的目的性、针对性,所以要排除其他不必要的因素的干扰,才能更好的发现问题。虽然是it,但有时候也应该用ut的思路来对待 —— 分块测试,笼而统之效果不会好的。否则还做什么it,整体部署到server上,直接人工测试、debug好了哇。
2 楼 wan_2004 2009-01-12  
去掉权限等用户控制机制
那你的用户权限设置怎么测试呢(drools),难道一起测了不好吗?

不大明白引入一个id:
就是你客户端存在cookie里面那个jsessionid
下次如果还是使用new FacesRequest而不引用那个id就是重新建立一个httpSession的,这样存到session登陆状态也没有了

seam的testNG
这个说法确实不妥。谢谢指正
1 楼 dearshor 2009-01-12  
不大明白引入一个id
引用
String id=new FacesRequest() {...}.run();

如何解决
引用
比如我们的应用有用户机制,执行Action的时候需要登陆或是其他权限呢?

这个问题,能否进一步解释一下?

我谈一下我对这个问题的理解:
一般在测试时,我们通常都希望去掉权限等用户控制机制,以便能纯粹测试业务逻辑,无论是unit test还是integration test都一样。seam中也提供这样的机制,可以全局禁用所有restriction以方便测试。

这个时候如果你的业务逻辑代码里引用到了User这个domain model,可以直接提供一个user实例(比如可以硬编码new一个)。

对于用户控制本身的业务逻辑,可以专门写test suite来testing它们。


BTW,
引用
seam的testNG
这种说法不妥,TestNG是一个建立在junit之上的通用的testing framework,怎么成了seam专用的了?

PS,能否分享一下你基于tomcat配置seam集成测试环境的经验?seam官方文档上只有基于jboss embedded配置seam集成测试环境的相关介绍。

相关推荐

    Seam 2.1 安全模块框架

    Seam 2.1 安全模块框架是一个强大的工具,为使用 Seam 开发的应用程序提供了全面的安全管理和认证机制。框架的核心特性包括: 1. **安全验证**:Seam 提供了一个可扩展的安全验证层,基于 Java Authentication and ...

    Seam框架文档简述

    ### Seam框架核心知识点详解 #### 一、Seam框架简介 Seam,全称为JBoss Seam,是一款基于Java EE 5的技术栈构建的应用框架。它通过整合JSF(JavaServer Faces)与EJB 3.0(Enterprise JavaBeans 3.0)组件,并充分...

    Seam_Java框架.doc

    Seam是一个针对Java开发的全栈式框架,旨在简化开发过程,提高开发效率。它适应了快速开发和简化架构的需求,与传统的Java框架相比,Seam具有更简洁的层次结构和强大的组件机制。 首先,Seam的核心设计理念在于减少...

    提高Seam系统性能测试点

    Seam是一个Java EE框架,主要用于构建富互联网应用程序(Rich Internet Applications)。它整合了JSF、EJB、CDI、Hibernate等技术,为开发者提供了一种更高效、更灵活的开发方式。性能测试是确保Seam应用能够高效...

    seam+richfaces环境框架配置文件

    seam+richfaces环境框架的配置文件,经过我多次尝试才配置好的环境配置文件,很有用,适合刚接触这些技术的初学者,希望大家支持!

    seam 框架整合hibernate+jsf

    4. **安全性和身份验证**:Seam提供了内置的安全框架,可以轻松集成到JSF应用中,实现用户身份验证和授权。 5. **国际化和本地化**:Seam与JSF结合,使得应用的国际化和本地化变得更加简单,开发者可以通过Seam的...

    SEAM 中文开发指南

    - **SEAM**:SEAM 是一个基于 Java EE 的企业级应用框架,它简化了复杂的应用程序开发过程,并且提供了丰富的功能来支持业务逻辑的实现。 - **版本信息**:本文档介绍了 SEAM 2.0 GA 版本的功能特性及其使用方法。 ...

    jboss seam 中文文档集合

    JBoss Seam 是一个开源的应用框架,它结合了JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB) 3.0 和其他Java EE组件,旨在简化企业级开发。这个文档集合包含了对Seam及其相关技术...

    JBOSS SEAM组件中文手册

    4. **测试框架**: Seam 2.0引入了集成测试框架,使得单元测试和集成测试变得更加方便。 5. **国际化(i18n)和本地化(l10n)支持**: 提供了全面的国际化和本地化解决方案,方便多语言应用的开发。 **五、Seam的...

    seam in action 中文 english

    7. **国际化与本地化**:Seam支持多语言环境,对于中英文双语版本的书籍,这为开发者提供了跨越语言障碍的便利,帮助全球的开发者理解和使用Seam框架。 8. **测试支持**:Seam提供了一套完整的测试工具,包括单元...

    seam需要的jar包

    首先,Seam框架的核心依赖于JSF,这是Java EE中的一个用户界面组件框架,用于构建交互式Web应用。JSF提供了模型-视图-控制器(MVC)架构,通过组件和事件处理机制来处理用户交互。在压缩包中,你会找到如`jsf-api....

    seam 中文文档 pdf

    seam 中文文档 pdf 格式 JSF+EJB3.0快速开发框架Seam的中文版向导。。。

    Jboss seam 一个深度集成框架

    JBoss Seam 是一款由 JBoss 提供的开源框架,它致力于解决 JavaEE 应用程序开发过程中面临的诸多挑战,尤其是当涉及到多个不同框架时所带来的复杂性。在企业级 Java 开发领域,开发人员常常需要利用多个框架来构建...

    seam框架相关知识总结

    Seam框架的出现,旨在解决Java EE开发中的组件集成和事件驱动问题,提供了更流畅的开发体验。 一、Seam框架的核心特性 1. 组件模型:Seam采用了基于CDI的组件模型,允许开发者定义和管理应用的各个部分,提供依赖...

    近两个星期seamtest的学习

    在过去的两周里,我深入学习了SeamTest,这是一个用于Java EE应用测试的强大工具,尤其在Seam框架的上下文中。SeamTest提供了一种结构化的、声明式的测试方法,帮助开发者更有效地验证应用程序的各个层面,包括组件...

    seam 2中文手册

    seam下一代web开发框架

    为Seam做好准备

    Seam是一个Java EE集成框架,它将JavaServer Faces(JSF)、Java Persistence API(JPA)、Enterprise JavaBeans(EJB)3.0以及其他组件统一在一个简化开发的环境中。这篇博客的链接虽然无法直接访问,但我们可以...

    《SeamInAction》+《JbossSeam》+《官方中文指南》

    书中涵盖了Seam的核心概念,如组件管理、事件处理、安全、国际化和测试。此外,还深入探讨了Seam与JSF、RichFaces的结合使用,以及如何利用Seam进行服务端状态管理,提升应用性能。 《JBoss Seam》是另一本关于Seam...

    seam carving 测试数据集免费分享

    Seam Carving是一种在计算机视觉领域中用于图像内容自适应调整的技术,主要应用于图像缩放而不失真关键特征。这个测试数据集显然专注于这一技术的实际应用和效果验证。以下是关于Seam Carving及相关知识点的详细解释...

    jboss seam 学习资料,seam in action和官方手册

    **JBoss Seam 学习资源概述** ...通过阅读这些材料,开发者可以全面了解和掌握JBoss Seam框架,提升其在企业级Java应用开发中的技能。不论是初学者还是经验丰富的开发者,都能从中获益,进一步提升自己的技术水平。

Global site tag (gtag.js) - Google Analytics