2

ユーザー ガイドに記載されているように、LauncherDiscoveryRequestの助けを借りて JUnit 5 テストを検出しようとしています。私が使用しているコードは次のようになります。

LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
    .filters(includeClassNamePatterns(".*"))
    .build();

TestPlan plan = LauncherFactory.create().discover(request);

for (TestIdentifier root : plan.getRoots()) {
    System.out.println("Root: " + root.toString());

    for (TestIdentifier test : plan.getChildren(root)) {
        System.out.println("Found test: " + test.toString());
    }
}

LauncherDiscoveryRequestBuilderこのコードを実行している JVM のクラスパスでのみテストを自動検出しますか? テストクラスを検索するルートディレクトリを提供するために、メソッドDiscoverySelectors.selectClasspathRootsとセレクターを使用してみました。DiscoverySelectors.selectClasspathResourceただし、テストを発見することはできませんでした。のパラメーターはselectClasspathRootsselectClasspathResourceパッケージごとに編成されたクラス ファイルを含むルート ディレクトリを指す必要がありますか?それとも、各テスト クラス ファイルへのフル パスを指定しますか?

/some/dirテストクラスファイルを含むルートディレクトリを表す次のことを試しました:

File classesDir = new File("/some/dir");
LauncherDiscoveryRequestBuilder.request()
     .selectors(selectClasspathRoots(Collections.singleton(Paths.get(classesDir.toURI()))))
     .build();

私は見ましLauncherDiscoveryRequestBuilderTests.javaたが、サンプルコードが機能しない理由を理解するのにあまり役に立ちませんでした. 問題を最もよく診断するにはどうすればよいですか?

次の依存関係を使用しています。

  • org.junit.platform:junit-platform-engine:1.0.0-M3
  • org.junit.platform:junit-platform-launcher:1.0.0-M3
4

2 に答える 2

1

LauncherDiscoveryRequestBuilder は、このコードを実行している JVM のクラスパスでのみテストを自動検出しますか?

いいえ、jvm 内のすべてのクラスをスキャンできます。少なくとも 1 つのセレクターを提供する必要がありますが、検出はクラスパス上の整理されたフォルダー/パッケージ構造を通じて行われます。

フィルターを追加して、スキャンするクラスを制御します。

これはドキュメントからのものです。

現在、クラス、メソッド、パッケージ内のすべてのクラス、またはクラスパス内のすべてのテストを検索する可能性があります。

すべての検出セレクターは、テスト クラスに到達するためのさまざまな方法です。

もう少しコンテキストがあるかもしれませんが、ドキュメントとテストの下での実行/デバッグに基づいて理解できるのはこれだけです。

ClasspathScannerTests

出力

Root: TestIdentifier [uniqueId = '[engine:junit-jupiter]', parentId = null, displayName = 'JUnit Jupiter', source = null, tags = [], test = false, container = true]
Found test: TestIdentifier [uniqueId = '[engine:junit-jupiter]/[class:discover.suite.Junit5TestCase]', parentId = '[engine:junit-jupiter]', displayName = 'Junit5TestCase', source = ClassSource [className = 'discover.suite.Junit5TestCase', filePosition = null], tags = [], test = false, container = true]

サンプル テスト クラス

package discover.suite;

import org.junit.jupiter.api.Test;

public class Junit5TestCase {

    @Test
    public void junitMethod() {
    }

}

以下は、さまざまなセレクターを使用したいくつかの例です。

    //By classpath root
    File classesDir = new File("C:\\Users\\me\\Junit5\\target\\test-classes");

    LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
            .selectors(selectClasspathRoots(Collections.singleton(Paths.get(classesDir.toURI()))))
            .filters(includeClassNamePatterns(".*"))
            .build();

    //By package
    LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
            .selectors(selectPackage("discover.suite"))
            .filters(includeClassNamePatterns(".*"))
            .build();

    //By Class
    LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
            .selectors(selectClass(Junit5TestCase.class))
            .filters(includeClassNamePatterns(".*"))
            .build();

    //By Method
    LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
            .selectors(selectMethod(Junit5TestCase.class, "junitMethod"))
            .filters(includeClassNamePatterns(".*"))
            .build();
于 2016-12-30T03:15:12.597 に答える