1. 概要

この短いチュートリアルでは、コマンドラインからTestNGテストを起動する方法を説明します。 これは、ビルドの場合や、開発中に個別のテストを直接実行する場合に役立ちます。 Maven などのビルドツールを使用してテストを実行することも、javaコマンドを使用して直接実行することもできます。 両方のアプローチを見てみましょう。

2. プロジェクト概要の例

この例では、日付を文字列にフォーマットする1つのサービスを含むコードを使用してみましょう。

public class DateSerializerService {
    public String serializeDate(Date date, String format) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        return dateFormat.format(date);
    }
}

テストでは、nullの日付がサービスに渡されたときにNullPointerExeceptionがスローされることを確認するテストを1つ行います。

@Test(testName = "Date Serializer")
public class DateSerializerServiceUnitTest {
    private DateSerializerService toTest;

    @BeforeClass
    public void beforeClass() {
        toTest = new DateSerializerService();
    }

    @Test(expectedExceptions = { NullPointerException.class })
    void givenNullDate_whenSerializeDate_thenThrowsException() {
        Date dateToTest = null;

        toTest.serializeDate(dateToTest, "yyyy/MM/dd HH:mm:ss.SSS");
    }
}

また、コマンドラインからTestNGを実行するために必要な依存関係を定義するpom.xmlを作成します。 必要な最初の依存関係はTestNGです。

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.4.0</version>
    <scope>test</scope>
</dependency>

次に、JCommanderが必要です。 TestNGは、これを使用してコマンドラインを解析します。

<dependency>
    <groupId>com.beust</groupId>
    <artifactId>jcommander</artifactId>
    <version>1.81</version>
    <scope>test</scope>
</dependency>

最後に、TestNGでHTMLテストレポートを作成する場合は、 WebJar forJQuery依存関係を追加する必要があります。

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.5.1</version>
    <scope>test</scope>
</dependency>

3. TestNGコマンドを実行するためのセットアップ

3.1. Mavenを使用して依存関係をダウンロードする

Mavenプロジェクトがあるので、それをビルドしましょう。

c:\> mvn test

このコマンドは次のように出力します。

[INFO] Scanning for projects...
[INFO] 
[INFO] ----------< com.baeldung.testing_modules:testng_command_line >----------
[INFO] Building testng_command_line 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.639 s
[INFO] Finished at: 2021-12-19T15:16:52+01:00
[INFO] ------------------------------------------------------------------------

これで、コマンドラインからTestNGテストを実行するために必要なものがすべて揃いました。 すべての依存関係は、通常はユーザーの.m2フォルダー内にあるMavenローカルリポジトリーにダウンロードされます。

3.2. クラスパスの取得

javaコマンドを介してコマンドを実行するには、-classpathオプションを追加する必要があります

$ java -cp "~/.m2/repository/org/testng/testng/7.4.0/testng-7.4.0.jar;~/.m2/repository/com/beust/jcommander/1.81/jcommander-1.81.jar;~/.m2/repository/org/webjars/jquery/3.5.1/jquery-3.5.1.jar;target/classes;target/test-classes" org.testng.TestNG ...

これを次のように省略します -cp 後のコマンドラインの例で。

4. TestNGコマンドラインを確認する

javaを介してTestNGにアクセスできることを確認しましょう。

$ java -cp <CLASSPATH> org.testng.TestNG

すべてが正常に機能する場合、コンソールに次のメッセージが表示されます。

You need to specify at least one testng.xml, one class or one method
Usage: <main class> [options] The XML suite files to run
Options:
...

5. TestNGシングルテストを起動します

5.1. javaコマンドを使用して単一のテストを実行する

これで、次のコマンドラインを使用するだけで、単一のテストスイートファイルを構成することなく、単一のテストをすばやく実行できます

$ java -cp <CLASSPATH> org.testng.TestNG -testclass "com.baeldung.testng.DateSerializerServiceUnitTest"

5.2. Mavenで単一のテストを実行する

Mavenでこのテストのみを実行する場合は、pom.xmlファイルでmaven-surefire-pluginを構成できます。

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>**/DateSerializerServiceUnitTest.java</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

この例では、次の名前のプロファイルがあります ExecuteSingleTest 実行するように構成 DateSerializerServiceUnitTest.java。 このプロファイルを実行できます。

$ mvn -P ExecuteSingleTest test

ご覧のとおり、 Mavenは、単一のテストを実行するために、単純なTestNGコマンドライン実行よりもはるかに多くの構成を必要とします。

6. TestNGTestSuiteを起動する

6.1. javaコマンドを使用したテストスイートの実行

Test Suiteファイルは、テストの実行方法を定義します。 必要な数だけ持つことができます。 そして、テストスイートを定義するXMLファイルを指すことでテストスイートを実行できます

$ java -cp <CLASSPATH> org.testng.TestNG testng.xml

6.2. Mavenを使用したテストスイートの実行

Mavenを使用してテストスイートを実行する場合は、プラグインmaven-surefire-plugin構成する必要があります。

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

ここでは、 ExecuteTestSuite という名前のMavenプロファイルがあり、 maven-surefireプラグインを構成してtestng.xmlテストスイートを起動します。 次のコマンドを使用して、このプロファイルを実行できます。

$ mvn -P ExecuteTestSuite test

7. 結論

この記事では、 TestNGコマンドラインが単一のテストファイルを実行するのにどのように役立つかを見ましたが、Mavenを使用してテストのフルセットを構成および起動する必要があります。 いつものように、この記事のサンプルコードは、GitHubから入手できます。