我目前正在开发一个可以在外部类上执行 JUnit 测试用例的程序。这些外部课程由学生发送,我们希望对其进行评估。
我有以下测试用例
import static org.junit.Assert.*;
import org.junit.Test;
public class Task1Test {
@Test
public void testAdd() {
Task1 t = new Task1();
int a = 5;
int b = 11;
assertEquals("Wrong add result", a+b, t.add(a,b));
}
}
我编译它:
$ javac -cp .:../lib/junit/junit-4.11.jar Task1Test.java
这Task1
将是一个学生的课程,但现在它只是一个示例类,其中包含一个add
返回错误结果的方法。该文件Task1.java
位于与 相同的文件夹中Task1Test.java
。
在我的程序中,我加载了测试用例类并尝试使用以下命令运行它JUnitCore
:
String testsPath = "/path/to/classes";
String junitJar = "/path/to/junit-4.11.jar"
URL taskUrl = new File(testsPath).toURI().toURL();
URL[] urls = new URL[] {taskUrl,junitJar};
@SuppressWarnings("resource")
ClassLoader loader = new URLClassLoader(urls);
Class<?> clazz = loader.loadClass(task);
Result res = JUnitCore.runClasses(clazz);
if(!res.wasSuccessful()) {
for(Failure f : res.getFailures()) {
System.out.println(f.toString());
}
}
但是,它没有按预期工作。当我运行此代码时,我收到以下消息:
initializationError(Task1Test): No runnable methods
当我使用反射查看加载的类时,我可以看到该方法testAdd
没有注释(即method.getAnnotation(org.junit.Test.class)
返回null
)。
有人有想法吗?我是否忘记了编译器开关或其他任何东西?
我正在使用 Java 1.7.0_11
,代码在 Glassfish 3.1.2.2 上的 Web 应用程序中运行
编辑:
我可以从命令行运行测试用例:
$ java -cp .:../../code/lib/junit/junit-4.11.jar:../../code/lib/junit/hamcrest-core-1.3.jar org.junit.runner.JUnitCore Task1Test