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

Posted

技术标签:

【中文标题】java.lang.Exception:测试类应该只有一个公共零参数构造函数:【英文标题】:java.lang.Exception: Test class should have exactly one public zero-argument constructor: 【发布时间】: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 构造函数的相应参数),您的问题就会消失。 谢谢安迪,它帮助了我 为什么没有答案标记为正确? 【参考方案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());      

希望这会有所帮助。

【讨论】:

以上是关于java.lang.Exception:测试类应该只有一个公共零参数构造函数:的主要内容,如果未能解决你的问题,请参考以下文章

使用java.lang.Exception的错误:测试类应该只有一个公共构造函数

java.lang.Exception:没有找到匹配使用 Intellij IDEA 的方法的测试

SpringBoot Junit 单元测试,提示:java.lang.Exception: No tests found matching

JUnit测试提示Java.lang.Exception: No runnable methods

Java语言中两种异常的差别

已解决 java.lang.Exception: No runnable methods 异常