🚀

Launchable Advent Calendar 14日目 - ignore-new-testsオプション

2022/12/14に公開

Launchableの各機能の利用方法を紹介する Launchable Advent Calendar 14日目です。

はじめに

今日はDay 6で紹介した launchable subset コマンドの一オプションである --ignore-new-tests オプションについて紹介します。
このオプションはローカルでの開発を支援することを目的に追加されたオプションです。

新しいテストを追加する際、追加したテストは手元で個別に実行し通ったことを確認してからPRやレビュー依頼など行うと思います。

その際、関連するテストも失敗しないのを手元で確認できたらと思ったことはないでしょうか。
launchable subset コマンドを使えば --time 3m の様に手元で実行可能な量のテストをPredictive Test Selection(PTS)で取得可能です。

ただしLaunchableの仕様上、新規に追加されたテストが優先的にPTSによって選択されます。
新規で追加されたテストを除いた結果を取得できるようにするのが --ignore-new-tests オプションです。

--ignore-new-tests

使い方は --ignore-new-tests オプションを launchable subset コマンドに追加するだけです。

$ launchable subset --time 3m maven src/test/java/ > launchable-subset.txt

Konboi/launchable-java-example での例

Konboi/launchable-java-exampleを使って --ignore-new-tests を試してみます。

まずは普通に実行してみましょう。
ここでは分かりやすいよう --target 100% と指定し全件テストが返る状態で launchable subset を実行します。

$ launchable record build --name ignore-new-tests-example
$ launchable subset --target 100% maven src/test/java
example.MulTest
example.AddTest
example.SubTest
example.DivTest
Launchable created subset 396180 for build ignore-new-tests-example (test session 1619454) in workspace konboi/advent-calendar-2022

|           |   Candidates |   Estimated duration (%) |   Estimated duration (min) |
|-----------|--------------|--------------------------|----------------------------|
| Subset    |            4 |                      100 |                   0.106667 |
| Remainder |            0 |                        0 |                   0        |
|           |              |                          |                            |
| Total     |            4 |                      100 |                   0.106667 |

Run `launchable inspect subset --subset-id 396180` to view full subset details

引数3つの合計を計算するAdd3クラスとAdd3Testを追加します。

Add3.java
// demonstration change
package example;

public class Add3 {
  public int calc(int x, int y, int z) {
    return x + y + z;
  }
}
Add3Test.java
package example;

import org.junit.Test;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

public class Add3Test {
  @Test
  public void calc() {
    assertThat(new Add3().calc(3, 4, 5), is(12));
  }
}

この状態で launchable subset を実行してみます。
新規で追加したAdd3Testが返って来ている事が分かります。

$ launchable subset --target 100% maven src/test/java
example.Add3Test
example.MulTest
example.SubTest
example.AddTest
example.DivTest
Launchable created subset 396185 for build ignore-new-tests-example (test session 1619454) in workspace konboi/advent-calendar-2022

|           |   Candidates |   Estimated duration (%) |   Estimated duration (min) |
|-----------|--------------|--------------------------|----------------------------|
| Subset    |            5 |                      100 |                   0.126683 |
| Remainder |            0 |                        0 |                   0        |
|           |              |                          |                            |
| Total     |            5 |                      100 |                   0.126683 |

Run `launchable inspect subset --subset-id 396185` to view full subset details

では --ignore-new-tests オプションを追加してみましょう。
Add3Testが除かれているのが確認できます。

$ launchable subset --target 100% --ignore-new-tests maven src/test/java
example.MulTest
example.AddTest
example.SubTest
example.DivTest
Launchable created subset 396186 for build ignore-new-tests-example (test session 1619454) in workspace konboi/advent-calendar-2022

|           |   Candidates |   Estimated duration (%) |   Estimated duration (min) |
|-----------|--------------|--------------------------|----------------------------|
| Subset    |            4 |                      100 |                   0.113333 |
| Remainder |            0 |                        0 |                   0        |
|           |              |                          |                            |
| Total     |            4 |                      100 |                   0.113333 |

Run `launchable inspect subset --subset-id 396186` to view full subset details

サンプルPR

さいごに

14日目はローカルでの開発を助ける --ignore-new-tests オプションについて紹介しました。
明日はPTSにインプットを渡さなくてもテスト一覧を実行できるZero Input Subsetについて紹介します。

Discussion