在编写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;
}
}
然后我遇到了一个场景,即为表单创建单个数据对象类没有意义。该表格与优惠券的创建有关,然后可能有不同类别的优惠券。为简洁起见,我会限制这里的字段数量。所以会有两种优惠券 - 优惠和可打印。它们都有优惠券名称和一个特定的字段 (让我们考虑一下 - 提供过期日期)和另一个用于打印(让我们考虑一下 - 可打印的代码)
所以我决定创建Coupon抽象类,它将拥有所有常见字段,然后CouponOffer和CouponPrintable类将扩展Coupon类并添加自己的字段,即
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();
}
}
我愿意知道在这里使用抽象类是不好的方法,并且有更好的解决方案可用。
答案 0 :(得分:3)
我认为这是一个很好的解决方案。
您的班级CouponOffer
只会添加offerExpireDate
功能。 Coupon
的任何其他功能(属性)都可以被其他实现重用。
无需为每个实现重复简单的Coupon
字段
答案 1 :(得分:0)
我认为这是一个很好的解决方案,但基础Coupon
类不需要abstract
。您正在创建一个类层次结构,这是OO编程应该完成的主要部分。