2011-11-23 70 views
0

在编写UI自动化测试时,我遇到了包含许多字段的表单,而不是将大量参数传递给测试方法,我创建了类来快速设置表单数据。所以,如果有一个注册表格创建SignUpDataObjectClass这将对生成相应的领域,即数据对象使用抽象类有多糟糕

public class SignUpFormObject() { 
private username; 
private password; 

public SignUpFormObject setUsername(String username) { 
    this.username = username; 
    return this; 
} 

public String getUsername() { 
    return username; 
} 

public SignUpFormObject setPassword(String password) { 
    this.password = password; 
    return this; 
} 

public String getPassword() { 
    return password; 
} 

// Util method to set signup test data. Test method can use it on the fly 
public static SignUpFormObject setSignUpData() { 
    SignUpFormObject dataObject = new SignUpFormObject(); 
    dataobject.setUsername("test user").setPassword("password"); 

    return dataobject;  
} 
} 

然后我碰到一个场景来了,当它没有意义的,有一个数据对象类的形式实例变量。表格与创建优惠券有关,然后可能有不同类别的优惠券。为了简洁起见,我会在这里限制字段的数量。所以会有两种优惠券 - 优惠和可打印。他们都将有优惠券的名称和具体的一个领域提供 (让我们考虑一下吧 - 提供到期日期),另一个用于打印(我们认为这是 - 打印代码)

所以我决定创建券抽象类,将有所有公共字段,然后CouponOffer和CouponPrintable类将延长优惠券类,并添加自己的领域,即

public abstract class Coupon { 
private String couponname; 

public Coupon setCouponname(String couponName) { 
    this.couponname = couponname; 
} 

public String getCouponname() { 
    return couponname; 
} 

而且CouponOffer类在这里 -

public class CouponOffer extends Coupon { 
private String offerExpireDate; 

public CouponOffer setOfferExpireDate(String offerExpireDate) { 
    this.offerExpireDate = offerExpireDate; 
    return this; 
} 

public String getOfferExpireDate() { 
    return offerExpireDate; 
} 

// Util method to set coupon offer data 
public static CouponOffer setCouponOfferData() { 

    CouponOffer couponOffer = new CouponOffer();  
    couponOffer.setCouponname("test coupon");  
    couponOffer.setOfferExpireDate("31/12/2013"); 
    return couponOffer(); 
} 
} 

我愿意知道使用抽象类是不好的方法,有更好的解决方案。

+2

只是好奇,不应该'setSignUpData'和'setCouponOfferData'是静态方法吗? – bezmax

+0

这是我平行运行测试的问题吗? – Tarun

+1

不,你正在创建一个couponOffer的新实例。所以它是完全线程安全的,使其成为静态的。 – bezmax

回答

3

我认为这是一个很好的解决方案。

您的班级CouponOffer只是增加了offerExpireDate功能。其他功能(属性)Coupon可以被其他实现重用。

而无需重复琐碎Coupon领域的每一个实现

+0

其实我已经开始编写一类优惠券,最初所有类型的优惠券都有所有的字段,但是课程规模变得非常可怕,我发现我经常上下滚动。因此,我虽然将它们分为多个类别...... – Tarun

0

我认为这是除了基Coupon类并不需要是abstract一个很好的解决方案。您正在创建一个类层次结构,这是OO编程应该完成的主要部分。

+0

我声明它是抽象因为它实例化它是没有意义的,因为它本身是不完整的。尽管我可以使用私有构造函数或者其他东西,但我尽管抽象类最适合 – Tarun