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