0

私は現在、外部クラスで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

4

1 に答える 1

1

this answerから解決策を見つけました 。親クラスローダーを設定しなかったため、問題が発生したようです。他の回答で述べたように設定すると、テストが実行されます。

于 2013-01-29T15:57:09.013 に答える