コマンドラインとJavaのみを使用して、JUnitクラスから単一のテストを実行できるようにするアプローチを見つけようとしています。
次を使用して、クラスからテストのセット全体を実行できます。
Java -cp .... org.junit.runner.JUnitCore org.package.classname
私が本当にやりたいことは次のようなものです:
Java -cp .... org.junit.runner.JUnitCore org.package.classname.method
または:
Java -cp .... org.junit.runner.JUnitCore org.package.classname#method
JUnitアノテーションを使用してこれを行う方法があるかもしれないことに気づきましたが、テストクラスのソースを手動で変更しないことをお勧めします(これを自動化しようとしています)。また、Mavenにはこれを行う方法があるかもしれないこともわかりましたが、可能であれば、Mavenに依存しないようにしたいと思います。
だから、これを行う方法はありますか?
私が探しているキーポイント:
カスタムのベアボーンJUnitランナーをかなり簡単に作成できます。 com.package.TestClass#methodName
という形式で単一のテストメソッドを実行するものを次に示します。
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;
public class SingleJUnitTestRunner {
public static void main(String... args) throws ClassNotFoundException {
String[] classAndMethod = args[0].split("#");
Request request = Request.method(Class.forName(classAndMethod[0]),
classAndMethod[1]);
Result result = new JUnitCore().run(request);
System.exit(result.wasSuccessful() ? 0 : 1);
}
}
次のように呼び出すことができます。
> Java -cp path/to/testclasses:path/to/junit-4.8.2.jar SingleJUnitTestRunner
com.mycompany.product.MyTest#testB
JUnitソースをざっと見てみると、JUnitはこれをネイティブにサポートしていないという同じ結論に達しました。 IDEにはすべてのアクションの中でも特にカーソルの下でテストメソッドを実行できるカスタムJUnit統合があるため、これは私にとって決して問題ではありませんでした。コマンドラインから直接JUnitテストを実行したことはありません。私は常にIDEまたはビルドツール(Ant、Maven)のどちらかで処理するようにしました。特に、デフォルトのCLIエントリポイント(JUnitCore)は、テストの失敗時にゼロ以外の終了コード以外の結果出力を生成しないためです。
注:JUnitバージョン4.9以上の場合、クラスパスに hamcrest ライブラリが必要です
Mavenを使用してプロジェクトをビルドし、SureFire mavenプラグインを使用してjunitテストを実行します。この設定があれば、次のことができます。
mvn -Dtest=GreatTestClass#testMethod test
この例では、クラス "GreatTestClass"内で "testMethod"というテストメソッドを実行するだけです。
詳細については、 http://maven.Apache.org/surefire/maven-surefire-plugin/examples/single-test.html をご覧ください。