0

我有一个 Selenium Webdriver 自动化测试项目,我的结构是这样的:

有两个类是实际测试有一个类读取生成测试数据并定义我使用的一些自定义方法,并且有 3 个“服务”类 - 电子邮件发件人、屏幕截图捕获器和 csv 阅读器。

现在,如果我能够只使用项目中所有类的方法和属性(或者我可以,但我不知道如何),而不必以这种循环方式荒谬地扩展,我会喜欢它

所以我现在正在做的是以下

Test1、Test2 扩展了 AppData,它扩展了 Mailer,它扩展了 ScreenCapturer,它扩展了 CSV 阅读器。

我确信有一种更优雅的方式来做到这一点,但它是什么?

PS:你认为我将所有服务放在一个类中并扩展这一类是个好主意吗?如果你这样做了 - 为什么?

编辑:我在这个问题上得到了一个很好的答案,所以我删除了我放在这里的第一个代码实例,因为现在我的问题略有改变。

编辑:好的,我现在正在尝试这些新东西,这让我很困扰。

我有一个包含方法 randomizer(int min, int max) 的 AppData 类:

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”吗?在每次我提到随机数之前?在我能够调用它之前,我必须从随机化器方法中删除“静态”修饰符。我经常使用这种方法。同样的做法是否适用于变量?

然后就得用这套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]");
4

1 回答 1

1

您正在寻找的是(也许)Dependency Injection。不要创建一系列继承类,而是在需要时注入“服务”类。pe 在AppTest3inject的构造函数中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();
    }
}
于 2013-08-11T11:10:48.933 回答