我有一个Selenium Webdriver自动化测试项目,我用这种方式构建它:
有两个类是实际测试 有一个类读取生成测试数据并定义了我使用的一些自定义方法 并且有3个“服务”类 - 电子邮件发件人,屏幕截图捕获器和csv阅读器。
现在,如果我能够使用项目中所有类的方法和属性(或者我可以,但我不知道如何),而不必以这种循环方式可笑地扩展,我会喜欢它
所以我现在正在做的是以下
Test1,Test2扩展AppData,扩展了Mailer,扩展了ScreenCapturer,扩展了CSV阅读器。
我确信有一种更优雅的方式可以做到这一点,但它是什么?
PS:你认为我把所有服务放在一个类中只是扩展这个类是一个好主意,如果你这样做 - 为什么?
编辑:我对这个问题得到了很好的答案,所以我删除了我放在这里的第一个代码实例,因为现在我的问题已经略有改变了。 编辑:好的,我现在正在尝试这些新东西,这就是困扰我的。我有这个AppData类,它包含一个方法randomizer(int min,int max):
public abstract class AppData {
public int randomizer(int min, int max) {
int d = (max - min) + 1;
int c = min + (int) (Math.random() * ((d)));
return c;
}
}
在另一个类 - AppTest中,我想使用随机数发生器:
public class AppTest { //extends AppData
private AppData appdata;
public void someVoid() {
int randomNumber = appdata.randomizer(1, 99999);
int randomUser = appdata.randomizer(1, 250);
int randomPlace = appdata.randomizer(1, 65);
}
}
我这样做了吗?我应该把“appdata”。每次我提到随机数发生器之前? 在我能够完全调用它之前,我必须从randomizer方法中删除“静态”修饰符。 我使用这种方法很多。同样的做法适用于变量吗?
然后我必须使用这套15种自定义方法,总是放“appdata”似乎不方便。到处。我确定我做得不对。
focus();
fillByName("user[first_name]", firstUserFirstName);
fillByName("user[last_name]", firstUserLastName + randomNumber);
fillByName("user[email]", firstUsersEmail);
fillByName("user[password]", password);
submitByName("user[password]");
答案 0 :(得分:1)
您正在寻找的是(可能)Dependency Injection
。不要创建一个继承类链,但如果需要,请注入“服务”类。体育在AppTest3
注入AppData
的构造函数中。
您可能需要Factories
来创建类(包含所有注入的依赖项)。
public class Mailer {
public void sendMailWithAttachment(
String attachment
) {
//code here
}
}
public class AppTest3 {
private Mailer mailer;
public AppTest3 (
Mailer mailer
) {
this.mailer = mailer;
}
public void run() {
// do some crazy things here and
this.mailer.sendMailWithAttachment(
"crazy file content"
);
}
}
public class AppTest3Factory {
public AppTest3 createAppTest3() {
return new AppTest3(
new Mailer();
);
}
}
public class Main {
public static void main(
String [] args
) {
AppTest3Factory appFactory = new AppTest3Factory();
AppTest3 app = appFactory.createAppTest3();
app.run();
}
}