【问题标题】:java.lang.Exception: Test class should have exactly one public zero-argument constructor:java.lang.Exception:测试类应该只有一个公共零参数构造函数:
【发布时间】:2015-12-21 14:12:29
【问题描述】:

我有一个类:函数库,我在构造函数中实例化 webdriver 实例,如下所示

public class FunctionLibrary {
    public WebDriver driver;

    public FunctionLibrary(WebDriver driver)
    {
        driver = new FirefoxDriver();
        this.driver=driver;
    }

    public WebDriver getDriver(){
        return this.driver;
    }
}

我正在访问扩展超类的子类中的 webdriver 实例:函数库

public class Outlook extends FunctionLibrary{
    public Outlook(WebDriver driver) {
        super(driver);      
    }

    @Before
    public void testSetUp()
    {
        getDriver().navigate().to("https://google.com");
    }

    @After
    public void closeTest()
    {
        getDriver().close();
    }

    @Test
    public void openOutlookAndCountTheNumberOfMails()
    {
        System.out.println("executed @Test Annotation");        
    }
}

当我执行上面的一段junit代码时 我收到错误

java.lang.Exception: 测试类应该有一个公共的零参数构造函数

任何人都可以告诉我哪里出错了

【问题讨论】:

  • 你没有一个公开的零参数构造函数。您只有一个公共的单参数构造函数。你觉得构造函数参数driver会从哪里来?
  • 顺便说一句:没有必要为此使用继承。使用组合。
  • 另外:你重写了 driver 的值,传递给 FunctionLibrary 的构造函数。您目前不需要该参数;如果您删除参数(以及 Outlook 构造函数的相应参数),您的问题就会消失。
  • 谢谢安迪,它帮助了我
  • 为什么没有答案标记为正确?

标签: java selenium-webdriver junit constructor expectations


【解决方案1】:

无需将参数传递给FunctionLibrary 的ctor,因为您只需覆盖其值:

public class FunctionLibrary {
    public WebDriver driver;

    public FunctionLibrary()
    {
        this.driver=new FirefoxDriver();
    }

    // etc.
}

进行此更改意味着您无需从测试类中传递参数:只需删除其构造函数即可。

【讨论】:

    【解决方案2】:

    您需要在班级顶部添加@RunWith(Parameterized.class)

    如果您正确使用@Parameters,它将运行良好。 :)

    【讨论】:

      【解决方案3】:

      您没有公共的零参数构造函数。测试环境不知道将什么传递给它的构造函数,因为您需要传递一个 WebDriver 对象。

      public Outlook(WebDriver driver) {
          super(driver);
      }
      

      在那里,你希望测试环境通过什么?而是做一些事情,比如保持一个零参数的构造函数,然后自己传入一个 WebDriver 实例。这样的事情应该可以工作。

      public Outlook() {
          super(new FirefoxDriver());      
      }
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多