ノート
[SUB-TASK] 8379818: Refactor java/nio/file/Files/StreamLinesTest.java to use JUnit
StreamLinesTest を TestNG から JUnit へ移行し,OpTestCase への依存を取り除きました。
概要#
java/nio/file/Files/StreamLinesTest.java は,Files.lines が返すストリームの挙動を確認するテストです1。
このテストは TestNG で実行されており,java.util.stream.OpTestCase と TestData という testlibrary 側の補助クラスにも依存していました2。
ところで,昨今の net では(というか OpenJDK 全体で) TestNG を JUnit5 へ移行しようという動きがあるようです。
今回の修正では,このテストを JUnit へ移行し,TestNG と OpTestCase への依存を取り除きました3。
具体的には,@DataProvider と @Test(dataProvider = "lines") を,JUnit の @ParameterizedTest と @MethodSource("lines") に置き換えます。
withData(...).expectedResult(...).exercise() で行っていた検証は,Files.lines の結果を toList() で受け取り,assertEquals で期待値と比較する形にしました。
try (Stream<String> s = Files.lines(p, cs)) {
assertEquals(expected, s.toList());
}
これにより,テストの実行基盤は testng/othervm から junit/othervm へ変わり,/lib/testlibrary/bootlib や java.base/java.util.stream.OpTestCase のビルド指定も不要になりました。
2026/03/18 JBS で発見#
本件は,既存テストを JUnit へ移行する一連の作業の一部として JBS で発見しました。
StreamLinesTest は単純な TestNG テストではなく,OpTestCase を継承していたため,単にアノテーションを置き換えるだけでは済みませんでした。
まず,データ生成側は Object[][] を返す TestNG の DataProvider から,Stream<Arguments> を返す JUnit の MethodSource へ変更しました。
加えて,説明文字列はアサーションには使わないため,JUnit の Arguments.argumentSet に渡して,テスト表示名として扱う形にしました4。
static Arguments of(String description, IntFunction<String> lineGenerator,
IntFunction<LineSeparator> separatorGenerator, int n, Charset cs) {
return Arguments.argumentSet(description, lineGenerator, separatorGenerator, n, cs);
}
2026/03/19-26 レビュー対応#
レビュー中には,まず public 修飾子が不要であるとの指摘をいただき,これを削除しました。
また,Marcono12345 氏から,説明文字列を引数として渡すより Arguments.argumentSet を使う方が適しているとのコメントをいただき,その形へ変更しました。
その後,Brian Burkhalter6 氏から,import の順序,および補助メソッド checkLines の必要性についてレビューをいただきました。
たしかに List#equals が要素数も含めて比較するため,個別にサイズを確認する処理は冗長です。
そのため checkLines を削除して,assertEquals(expected, s.toList()) へ直接置き換えました。
2026/03/26 統合リクエスト#
Burkhalter6 氏に Approve されました。
レビューを確認したのち,/integrate を行い,統合リクエストを行いました。
2026/03/27 統合#
同氏に /sponsor をしていただき,1ed1bb87 として JDK へ統合されました。
Footnotes#
-
jdk/test/jdk/java/nio/file/Files/StreamLinesTest.java at f3069680e48712a7cacc4208550816300f68fbf4 · openjdk/jdkJDK main-line development https://openjdk.org/projects/jdk - jdk/test/jdk/java/nio/file/Files/StreamLinesTest.java at f3069680e48712a7cacc4208550816300f68fbf4 · openjdk/jdkGitHub
↩
-
jdk/test/jdk/java/nio/file/Files/StreamLinesTest.java at f3069680e48712a7cacc4208550816300f68fbf4 · openjdk/jdkJDK main-line development https://openjdk.org/projects/jdk - jdk/test/jdk/java/nio/file/Files/StreamLinesTest.java at f3069680e48712a7cacc4208550816300f68fbf4 · openjdk/jdkGitHub
↩
-
8379818: Refactor java/nio/file/Files/StreamLinesTest.java to use JUnit by PeyaPeyaPeyang · Pull Request #30302 · openj…JDK main-line development https://openjdk.org/projects/jdk - 8379818: Refactor java/nio/file/Files/StreamLinesTest.java to use JUnit by PeyaPeyaPeyang · Pull Request #30302 · open…GitHub
↩
-
8379818: Refactor java/nio/file/Files/StreamLinesTest.java to use JUnit by PeyaPeyaPeyang · Pull Request #30302 · openj…Convert StreamLinesTest to JUnit and remove dependency on TestNG test infrastructure, including OpTestCase. The test now uses standard JUnit assertions and no longer depends on te…GitHub
↩
-
Marcono1234 - OverviewMarcono1234 has 89 repositories available. Follow their code on GitHub.GitHub
↩
-
https://openjdk.org/census#bpbopenjdk.org↩ ↩2
-
8379818: Refactor java/nio/file/Files/StreamLinesTest.java to use JUnit · openjdk/jdk@1ed1bb8JDK main-line development https://openjdk.org/projects/jdk - 8379818: Refactor java/nio/file/Files/StreamLinesTest.java to use JUnit · openjdk/jdk@1ed1bb8GitHub
↩