【问题标题】:Error "Test class should have exactly one public zero-argument constructor" is returned返回错误“测试类应该只有一个公共零参数构造函数”
【发布时间】:2018-08-15 23:52:11
【问题描述】:

在搜索并没有找到合适的答案后,我在这里提出它。

我用@Test 编写了下面的简单类,当我尝试运行时,我得到“java.lang.Exception:测试类应该有一个公共零参数构造函数”错误。有人可以帮我解决这个问题吗?

package Shopping.Tests;

import Shopping.Config.TestData;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

@Slf4j
public class TestScenario1 {

private final TestData testData;

public TestScenario1(TestData testData) {
    this.testData = testData;
}

@Test
public void sampleTest(){
    log.info(testData.getBaseURL());
}
}

【问题讨论】:

  • 无需搜索。只需阅读错误消息。非常清楚。一个测试类必须只有一个 public zero-argument 构造函数。这句话有什么不明白的?你的类是否有一个公共的零参数构造函数?我只看到一个构造函数,它的参数不止零。
  • 消息说明了一切:您的测试必须只有一个构造函数,并且不能有参数,即必须是 `TestScenario1(TestData testData)` 而不是 `TestScenario1()`。然后查看如何将数据传递给该测试。

标签: java junit compiler-errors


【解决方案1】:

这种非默认构造函数使得测试框架无法创建类的实例

public TestScenario1(TestData testData) {

你需要一个无参数的构造函数:

public TestScenario1() { //or have no explicit constructor declared at all

初始化测试数据通常在一个带有 @Before 注释的方法中完成(假设 junit 是您的测试框架 - 请参阅 @Before 和 @BeforeClass)

public TestScenario1() {}
@Before
public void prepareTestData() {
    this.testData = fetchTestData()...//It can't be passed in as parameter.
}

【讨论】:

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