有人遇到此错误
initializationError(junit.framework.TestSuite):测试类只能有一个构造函数
用例。
我在TestSuite中有2个TestScripts。如果我动态创建TestSuite然后添加2个testScripts并调用此
Result result = JUnitCore.runClasses(clazz);
其中clazz是TestSuite类。
但是,如果在每个2个TestScripts上调用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):测试类只能有一个构造函数 但是,如果我直接执行此操作,它将运行良好。
File file = new File("file to ScriptTest.class");
Class<?> clazz = Class.forName(className, true, Thread.currentThread().getContextClassLoader());
Result result = JUnitCore.runClasses(clazz);
我在JUnit4中创建了测试类,并且运行我的主程序也依赖于JUnit4。
答案 0 :(得分:1)
您正在将类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());
}
与此同时,考虑将您的测试用例从JUnit 3升级到JUnit 4,JUnit 3现在已经很老了。
[*]除了参数化测试等。在OP的用例中,它是真的。
答案 1 :(得分:0)
在您的测试类中,如果您正在注入依赖项,private final Whatever whatever;
擦除 final
并擦除构造函数。
这对我有用