【问题标题】:Easiest way to call one same method in two different class junit在两个不同的类junit中调用一个相同方法的最简单方法
【发布时间】:2013-08-01 21:31:32
【问题描述】:

我有一种方法,在"First class" 中说Login。现在在我的"Second class" 中再次需要登录,所以谁能告诉我完成这项任务最简单的方法是什么?

  1. 我是否应该在第二类中创建第一类的对象并调用第一类的方法。
  2. 我应该创建基类并扩展它吗?

如果可能,请提供任何示例 谢谢

【问题讨论】:

  • 如果FirstSecond 类的Login 相同,则只需在基类中创建它并在两个类中使用它...如果它也可以覆盖此方法Child 类的变化...采用第二种方法,这将涉及更好的继承...
  • 您好,感谢您的快速回复:)。你能告诉我在扩展基类时是否可以提及任何执行顺序。例如:我在基类中编写了“登录”方法并在“头等舱”中扩展,现在我在“头等舱”中有另一个方法说(addtest),所以我可以提一下它应该首先执行的任何执行顺序(登录)然后(添加测试)
  • @user2376425:这两个类是什么?它们是包含 junit 测试的类,还是不同的东西?
  • @vincebowdren :是的,它们包含 junit 测试

标签: eclipse junit selenium-webdriver


【解决方案1】:

好吧,让我在这里回答这个问题:

class MyBase
{
    void Login()
    {
        // TODO base defined login here
    }
}

class FirstClass extends MyBase
{
    // Define your methods in any order it is fine

    void Login()
    {
        // TODO firstclass defined login here
    }

    void addTest()
    {
        // Addtest code here
    }
}

int main()
{
    MyBase base;
    FirstClass firstClass;

    base.Login() // Will call the MyBase method for Login
    firstClass.Login() // Will call the FirstClass method for Login
}

所以定义方法的顺序并不重要,只要你做得很好。如果可能,请阅读 Java 中的 Inheritance,以便更清楚地了解您的方法。

你现在完全明白了吗..?如果是,则开始编码,如果不是,请告诉我,我们会更深入...

【讨论】:

  • 谢谢你的回答,它已经解决了我的问题:)
  • @NREZ - 这有什么帮助?你已经定义了一些你称之为“MyBase”的东西,但你没有将它用作基类,因为没有任何东西继承自它。而且您定义了两种不同的 Login() 方法,这是 OP 试图摆脱的问题。
  • 感谢@vincebowdren 指出...我忘了扩展 MyBase 类,尽管不知何故 OP 和我理解它...我也试图将它保持为一个非常简单的原型。 ..
【解决方案2】:

我建议实现Page Object Model,并将登录代码重构为表示登录屏幕的对象的方法。这样,登录代码将最容易用于需要执行登录的任何测试用例。代码将类似于以下简化版本:

public class LogInScreen {

    public void LogIn(String username, String password) {
        userNameTextField.sendKeys(username);
        passwordTextField.sendKeys(password);
        loginButton.click();
    }

public class MyTests {

    @Test
    public void testLoginNormalUser() {
        String username = "userA";
        String password = "badg3rs";
        publicscreen.LogIn(username, password);
        // carry on with the rest of the test.
    }

    @Test
    public void testLoginAdminUser() {
        String username = "userB";
        String password = "3lk";
        publicscreen.LogIn(username, password);
        // carry on with the rest of the test.
    }

注意您从中获得的好处:

  1. 与登录控件交互的代码位于代表登录屏幕的类中;测试用例代码不需要过多关注 UI 细节,因此每个 @test 都可以只关注测试逻辑。
  2. 任何测试用例都可以调用login()方法。
  3. 很简单:不需要继承或重载。

【讨论】:

  • 是的,这当然可以是一个更好的实现......@user2376425 你应该试试这个......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
相关资源
最近更新 更多