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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java.lang.Exception的错误:测试类应该只有一个公共构造函数相关的知识,希望对你有一定的参考价值。

我运行JUnit测试时遇到异常。

java.lang.Exception: Test class should have exactly one public constructor

以下是我的代码片段,有什么想法吗?

package com.tests;    

import org.junit.Rule;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;


public class AllTests implements TestRule {
    private int retryCount;

    private AllTests(int retryCount) {
        this.retryCount = retryCount;
    }

    public Statement apply(Statement base, Description description) {
        return statement(base, description);
    }

    private Statement statement(final Statement base, final Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                Throwable caughtThrowable = null;

                // implement retry logic here
                for (int i = 0; i < retryCount; i++) {
                    try {
                        base.evaluate();
                        return;
                    }
                    catch (Throwable t) {
                        caughtThrowable = t;
                        System.err.println(description.getDisplayName() + ": run " + (i + 1) + " failed");
                    }
                }
                System.err.println(description.getDisplayName() + ": giving up after " + retryCount + " failures");
                throw caughtThrowable;
            }
        };
    }

    @Rule
    public AllTests allTests = new AllTests(3);

    @ClassRule
    public static DockerComposeRule docker = wi.getDocker(logs);

    @Override
    public DockerComposeRule getDocker() {
        return docker;
    }

    @Test
    public void myFirstTest() throws Exception {
        // Test code here...
    }
}

我正在使用Gradle运行JUnit测试。这是一个Java项目,它直接失败。我尝试过很多东西,但无济于事。如果您愿意,很乐意提供更多详细信息。

答案

信息很明确:

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

您将单元测试类与同一类中的Rule测试类合并:AllTests。 您应该在自己的类中定义规则并删除此构造函数:

private AllTests(int retryCount) {
    this.retryCount = retryCount;
}

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

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

keytool 错误:java.lang.Exception:证书未导入,别名 mykey 已存在

android 应用程序中的 Geckoview 因错误“java.lang.Exception:加载 sqlite 库时出错”而崩溃

keytool 错误: java.lang.Exception: 密钥库文件存在, 但为空: E:xxxxxx.jks

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

java.lang.Exception: Socket bind failed