2011-11-23 35 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