`

使用Builder模式创建多值组合搜索测试用例实践

Web 
阅读更多
一、需求
有如下的基于web的组合搜索功能,需要创建自动化测试用例:

我们需要在所有的输入框输入不同的值,进行非常多次的搜索,然后验证

二、实现
创建一个类 ClientBasicSearchFields 去代表所有的输入框,创建一个方法 doClientBasicSearch(ClientBasicSearchFields csf)去执行搜索的操作,通过ClientBasicSearchFields将参数传入
    public void doClientBasicSearch(ClientBasicSearchFields csf){
    	type("element identifier1", csf.getClientName());
    	type("element identifier2", csf.getClientShortName());
    	type("element identifier3", csf.getAddress());
    	type("element identifier4", csf.getCity());
    	select("element identifier5", csf.getState());
    	type("element identifier6", csf.getZip());
    	type("element identifier7", csf.getFirstClientSerRep());
    	type("element identifier8", csf.getSedClientSerRep());
    	select("element identifier9", csf.getBillingFre());
    	select("element identifier10", csf.getClinicalFre());
    	
    	clickAndPause("submit");   	
    }


接下去是重点,使用Builder模式的java类ClientBasicSearchFields
public class ClientBasicSearchFields {
	private final String clientName;
	private final String clientShortName;
	private final String address;
	private final String city;
	private final String state;
	private final String zip;
	private final String firstClientSerRep;
	private final String sedClientSerRep;
	private final String billingFre;
	private final String clinicalFre;
	
	private ClientBasicSearchFields(Builder builder){
		clientName = builder.clientName;
		clientShortName = builder.clientShortName;
		address = builder.address;
		city = builder.city;
		state = builder.state;
		zip = builder.zip;
		firstClientSerRep = builder.firstClientSerRep;
		sedClientSerRep = builder.sedClientSerRep;
		billingFre = builder.billingFre;
		clinicalFre = builder.clinicalFre;		
	} 
	
	public String getClientName() {
		return this.clientName;
	}
	
	public String getClientShortName(){
		return this.clientShortName;
	}
	
	public String getAddress(){
		return this.address;
	}
	
	public String getState(){
		return this.state;		
	}
	
	public String getCity(){
		return this.city;
	}
	
	public String getZip(){
		return this.zip;
	}
	
	public String getFirstClientSerRep(){
		return this.firstClientSerRep;
	}
	
	public String getSedClientSerRep(){
		return this.sedClientSerRep;
	}
	
	public String getBillingFre(){
		return this.billingFre;
	}
	
	public String getClinicalFre() {
		return this.clinicalFre;
	}


	public static class Builder {
		private String clientName = "";
		private String clientShortName = "";
		private String address = "";
		private String city = "";
		private String state = "";
		private String zip = "";
		private String firstClientSerRep = "";
		private String sedClientSerRep = "";
		private String billingFre = "";
		private String clinicalFre = "";
		
		public Builder(){
			
		}
		
		public Builder clientName(String value){
			clientName = value;
			return this;
		}
		public Builder clientShortName(String value){
			clientShortName = value;
			return this;
		}
		
		public Builder address(String value){
			address = value;
			return this;
		}
		
		public Builder city(String value){
			city = value;
			return this;
		}
		
		public Builder state(String value){
			state = value;
			return this;
		}
		
		public Builder zip(String value){
			zip = value;
			return this;
		}
		
		public Builder firstClientSerRep(String value){
			firstClientSerRep = value;
			return this;
		}
		
		public Builder sedClientSerRep(String value){
			sedClientSerRep = value;
			return this;
		}
		
		public Builder billingFre(String value){
			billingFre = value;
			return this;
		}
		
		public Builder clinicalFre(String value){
			clinicalFre = value;
			return this;
		}
		
		public ClientBasicSearchFields build(){
			return new ClientBasicSearchFields(this);
		}
				
	}
	

}


最后,在测试方法中这样使用
public void testSearchByClientName() {
// 进入我们需要测试的页面
		logInToTheSystem();
		navigateToSearchClientPage();
// 根据设置的参数进行搜索
		ClientBasicSearchFields csf = new ClientBasicSearchFields.Builder().clientName(
				“testName”).build();
		doClientBasicSearch(csf);
// 验证结果
		verifySearchResultsPage();
	}

如果需要同时输入多个值进行搜索,可以采用如下方式:
ClientBasicSearchFields csf = new ClientBasicSearchFields.Builder().clientName(
				"某某某").city("杭州").zip("310000")
				.build();

在每一个测试方法中,我们可以创建一个csf,然后通过这种方法初始化测试数据,我们每次可以设置的参数个数都是可以选的,可以很简单得去创建更多我们需要的测试用例。

三、总结
如果用普通的javabean, 也可以实现同样的功能。用builder模式,看上去更加阅读,而且比JavaBean更加安全(Effective Java第二版)
  • 大小: 37.7 KB
分享到:
评论

相关推荐

    东北大学设计模式实验3

    7. **测试代码**:编写测试用例,验证Composite和Builder模式的正确实现。 通过这个实验,你不仅能深入理解这两种设计模式,还能提升在实际项目中应用设计模式的能力。在实践中,不断优化和调整代码,以满足更复杂...

    精通python设计模式源码

    创建型模式主要处理对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)以及原型模式(Prototype)。这些模式有助于我们控制对象的...

    设计模式代码示例及详细讲解

    这些文件通常会包含模式的实现、注释以及可能的测试用例,方便你在VS2010中直接编译和运行。 学习设计模式的过程中,理解其背后的意图和适用场景至关重要。例如,适配器模式用于使不兼容的接口能够协同工作;装饰器...

    Java中的设计模式Java开发Java经验技巧共6页.p

    创建型设计模式如单例模式(Singleton)、工厂模式(Factory)和建造者模式(Builder),它们主要关注对象的创建过程,确保在不同场景下能正确、高效地创建对象。例如,单例模式保证一个类只有一个实例,常用于配置...

    yifanzheng-java-design-patterns-master_java_

    在"java-design-patterns"这个项目中,你可能会找到每个模式的实现示例,包括源代码、测试用例和相关的说明文档。通过实际操作和分析这些代码,你可以更深入地理解每个模式的工作原理和适用场景。 例如,单例模式是...

    这是一套 Java 设计模式的集合示例-design-pattern.zip

    Java设计模式是软件工程中的一种最佳实践,它们是解决常见编程...此外,可能还包含了一些测试用例和文档,帮助解释每种模式的应用场景和优缺点。对于Java开发者来说,深入理解和掌握设计模式是提升编程能力的关键步骤。

    Dpatoolkit

    - **测试用例**:包含的测试代码展示了设计模式在实际使用中的效果,有助于验证模式的正确性和有效性。 通过分析Dpatoolkit的源代码,开发者不仅可以学习到如何在实际项目中应用设计模式,还可以了解到如何将这些...

    DesignDemo

    此外,它还可能包含测试用例,帮助我们验证模式的正确性和效率。 为了深入学习和理解"DesignDemo",你需要逐一探索每个模式,阅读代码,理解其结构和逻辑。同时,结合描述和注释,可以更好地了解设计模式如何解决...

    BuilderBuilder:使用流利的构建器对象而不是构造器生成Java POJO的工具

    Builder模式则解决了这个问题,通过将构建过程分解为一系列方法调用,每个方法设置一个属性,使得代码更易读,也更容易进行单元测试。 BuilderBuilder的工作原理是自动生成这些构建器类,开发者只需要提供POJO的...

    MyDesignPattern:学习设计模式

    在这样的项目中,你可能会找到每个设计模式的Java实现,以及相关的说明文档或者测试用例。通过阅读和分析这些代码,你可以深入了解如何在实际项目中应用设计模式。 在实际开发中,设计模式的应用并不是一成不变的。...

    flex4整合SSH(struts2+hibernate3+spring3)所有包 jars

    2. 创建Flex客户端:使用Flex Builder或Flash Builder创建Flex项目,并设置适当的AMF通道以与服务器通信。 3. 配置Struts2:在struts.xml配置文件中添加Flex插件,设置Action和Result类型,以便Flex客户端能够正确...

    Aryzath:Aryzath只是一个龙的名字,但是这个回购全是关于使用我最喜欢的语言Google的Go语言(Golang)实现的DESIGN PATERNS

    文件名"Aryzath-master"可能表示这是项目的主分支或者源码仓库的主目录,其中可能包含了各种实现设计模式的代码示例、测试用例以及相关的文档。对于想要深入学习Golang和设计模式的开发者来说,这个项目提供了一个...

    DesignPattern4J:java设计模式练习

    在软件开发领域,设计模式是一种经过时间和实践验证的解决方案,用于...项目的名称"DesignPattern4J-master"表明这是一个包含所有设计模式的主分支,可能包括了每个模式的独立示例和测试用例,为学习和实践提供了方便。

    DesignPattern-Exercises:设计模式练习

    在"DesignPattern-Exercises-main"目录下,你可能发现针对上述模式的实现示例,每个模式通常会有对应的测试用例,帮助你更好地理解和运用这些模式。通过实际操作这些代码,你可以深入理解设计模式如何在实际场景中...

    面向对象的分析与设计:有关设计模式的项目

    - "Object-Oriented-Analysis-and-Design-main"可能包含项目源码、文档、测试用例等,通过实际操作来巩固和深化设计模式的理解和应用。 在这个项目中,你将有机会亲手实现这些设计模式,理解它们的优缺点,以及在...

    job4j_design

    3. **测试用例**:为了验证模式的有效性,通常会有单元测试或者集成测试代码,这些测试用例有助于我们理解和验证模式的正确性。 4. **案例研究**:可能包含将设计模式应用于实际项目中的例子,帮助我们理解如何在...

    DesignPattern

    在"DesignPattern-master"这个项目中,你可能会找到每个模式的Java实现,以及相关的说明文档或测试用例。通过学习和理解这些模式,开发者可以写出更加健壮、易于维护的代码,同时提高代码的复用性和扩展性。设计模式...

    lookingForObjectByDesignPatternInRuby

    在Ruby编程语言中,设计模式是一种解决常见问题的模板或最佳实践,它为软件开发提供了可重用的解决方案。...运行项目中的测试用例是验证设计模式正确实现的关键步骤,这有助于确保代码按照预期工作,并且符合规格要求。

Global site tag (gtag.js) - Google Analytics