gpt4 book ai didi

java - 测试类只能有一个构造函数

转载 作者:行者123 更新时间:2023-11-30 11:42:31 26 4
gpt4 key购买 nike

有人遇到过这个错误

initializationError(junit.framework.TestSuite): 测试类只能有一个构造函数

用例。

我在一个测试套件中有 2 个测试脚本。如果我动态创建 TestSuite,然后添加 2 个测试脚本并调用它

Result result = JUnitCore.runClasses(clazz);

其中 clazz 是 TestSuite 类。

但是,如果在每 2 个 TestScript 上调用 JUnitCore.runClasses 就没有问题。

我使用了 JUnit3。

我对这个 JUnit error - IllegalArgumentException:Test class can only have one constructor 有类似的疑问,但我的涉及动态创建测试套件类。原因是有一个用例,我可以只在测试套件中包含 1 个测试脚本,或者我可以在测试套件中包含 2 个测试脚本。

更新代码:

public class ScriptTest1 extends TestCase { 
private ScriptTest1() { }
public void testMethod1() {
Assert.assertEquals(true, true);
}
}

public class ScriptTest2 extends TestCase {
private ScriptTest2() { }
public void testMethod2() {
Assert.assertEquals(true, true);
}
}

然后在另一个类

File file = new File("file to ScriptTest.class");
Class<?> clazz = Class.forName(className, true, Thread.currentThread().getContextClassLoader());

//construct a new test suite
TestSuite ts = new TestSuite("Sample Test Suite with only ScriptTest1");
ts.addTestSuite((Class<? extends TestCase>) clazz);

Result result = JUnitCore.runClasses(ts.getClass());
HashSet<String> failureMethod = new HashSet<String>();
for (Failure failure : result.getFailures()) {
System.out.println("Failure: " + failure.toString());
}

失败会输出:initializationError(junit.framework.TestSuite): Test class can only have constructor但是,如果我直接这样做,它会运行良好。

File file = new File("file to ScriptTest.class");
Class<?> clazz = Class.forName(className, true, Thread.currentThread().getContextClassLoader());
Result result = JUnitCore.runClasses(clazz);

我在 JUnit4 中创建了测试类,我也在运行依赖于 JUnit4 的主程序。

最佳答案

您正在将类 junit.framework.TestSuite.class 传递给 JUnitCore.runClasses()。 JUnitCore.runClasses 尝试实例化该类。为避免出现问题,它要求您传递的任何类都只有一个构造函数 [*]。 TestSuite 有多个公共(public)构造函数。

尝试:

TestResult result = new TestResult();
ts.run(result);

for (Enumeration<TestFailure> failures = result.failures(); failures.hasMoreElements();) {
TestFailure testFailure = failures.nextElement();
System.out.println("Failure: " + testFailure.toString());
}

与此同时,考虑将您的测试用例从 JUnit 3 升级到 JUnit 4,JUnit 3 现在已经很老了。

[*] 除了参数化测试等。在 OP 的用例中,这是真的。

关于java - 测试类只能有一个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com