jan*_*tox 5 java eclipse junit
有人遇到过这个错误吗
初始化错误(junit.framework.TestSuite):测试类只能有一个构造函数
使用案例。
我的 TestSuite 中有 2 个测试脚本。如果我动态创建 TestSuite,然后添加 2 个测试脚本并调用它
Result result = JUnitCore.runClasses(clazz);
Run Code Online (Sandbox Code Playgroud)
其中 clazz 是 TestSuite 类。
但是,如果我在每 2 个 TestScripts 上调用 JUnitCore.runClasses ,则没有问题。
我用的是JUnit3。
我对这个JUnit 错误有类似的问题 - 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在另一个班级
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());
}
Run Code Online (Sandbox Code Playgroud)
失败将输出:初始化错误(junit.framework.TestSuite):测试类只能有一个构造函数但是,如果我直接这样做,它将运行正常。
File file = new File("file to ScriptTest.class");
Class<?> clazz = Class.forName(className, true, Thread.currentThread().getContextClassLoader());
Result result = JUnitCore.runClasses(clazz);
Run Code Online (Sandbox Code Playgroud)
我在 JUnit4 中创建了测试类,并且我也依赖 JUnit4 运行我的主程序。
您将类 junit.framework.TestSuite.class 传递给 JUnitCore.runClasses()。JUnitCore.runClasses 尝试实例化该类。为了避免出现问题,它要求您传递的任何类都只有一个构造函数 [*]。TestSuite 有多个公共构造函数。
尝试:
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());
}
Run Code Online (Sandbox Code Playgroud)
与此同时,考虑将您的测试用例从 JUnit 3 升级到 JUnit 4,JUnit 3 现在已经很老了。
[*] 除了参数化测试等。在OP的用例中,这是真的。
| 归档时间: |
|
| 查看次数: |
12012 次 |
| 最近记录: |