私は現在、外部クラスで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)
returns null
)。
誰かアイデアがありますか?コンパイラスイッチなどを忘れましたか?
私はJavaを使用して1.7.0_11
おり、コードはGlassfish3.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