問題タブ [module-info]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
junit - Java <= 8 でモジュール境界を適用する方法
Java モジュール (Project Jigsaw で導入) を使用して、モノリシック アプリケーションをモジュール化したいと考えています。
残念ながら、私は現在Java 8を使用することに固執しています.とにかくこれらのモジュール(jarファイル)を構築したいと思いますが、依存関係とエクスポートされたAPIを宣言するためのmodule-info.javaファイルを使用する機能はありません.
数週間前、module-info.java ファイルでできることとほぼ同じことを定義できる API/フレームワークに出くわしました。モジュールが別のモジュールの内部を使用しないようにし、そのモジュールのみが明示的に依存するモジュールにアクセスできるようにするために、JUnit テストで使用できます。
もちろん、コンパイラや IDE からの支援はありませんが、JUnit によるアクセスを強制できます。残念ながら、API を提供するプロジェクトが見つかりません。
誰でも助けることができますか?
ところで。単体テスト以外の良いアプローチがあれば、それも教えてください!
java - Eclipse m2e は、JPMS モジュールを使用した Maven テスト jar をサポートしていません
プロジェクト「java11-app」と共有するテスト jar アーティファクトを生成するプロジェクト「java11-core」があります。これらのプロジェクトは、コマンド ライン Maven で正常にビルドされますが、Eclipse 内では、テスト jar で共有されているクラスが見つかりません。
バージョン情報:
- Apache Maven 3.6.0 (コマンドラインおよび Eclipse)
- Java バージョン: 11.0.1、ベンダー: Oracle Corporation
- Eclipse IDE: バージョン: 2018-09 (4.9.0)
- M2E プラグイン: 1.9.1.20180912-1601
私はもともとこれらを従来の非JPMSプロジェクトとしてプロジェクトに作成しました。これらのプロジェクトは、期待どおりに正常にコンパイルおよび実行されました。module-info.java を java11-core と java11-app の両方に追加した後、Eclipse コンパイラーはコア プロジェクトの共有テスト ファイルを認識できませんでした。
これは、プロジェクト構造の概要を示すパッケージ エクスプローラーのスナップショットです。
それぞれ追加された java11-app および java11-core module-info コンテンツ:
ご覧のとおり、com.java11.core からテスト ユーティリティ パッケージをエクスポートしません。テスト パッケージをエクスポートしたくありません。エクスポートすると、テスト クラスが公開されてしまうからです。また、新しいテスト プロジェクトを導入したくもありません。実際のシナリオでは、テスト ユーティリティと、テストを支援するプロジェクトとの間に循環的な依存関係が必要になる可能性が非常に高いからです。
AppTest.java のビルド エラー。Eclipse によって報告された失敗の興味深い点は、CoreTestUtil クラスが見つからないと主張しているのではなく、次のことです。
私の仮定は、java11-core からのこのパッケージのエクスポートの欠如、および/または java11-app でのこのパッケージの require の欠如により、クラスが別のテスト jar に存在する場合でも、Eclipse はアクセスが制限されていると信じるようになるということです。 .
java11-app のモジュール パスには、java11-core がモジュールとして含まれていることが示され、テスト コードなしがNoに設定されています。
私は新しくリリースされた機能に取り組んでいることを知っていますが、Eclipse JPMS プロジェクト全体でテスト クラスを共有することはまだサポートされていないのではないかと疑っています。しかし、サポートされている更新をどこで探すべきか (Eclipse? M2E プラグイン) がわかりません。また、ソフトウェア プロジェクトに JPMS を採用している間に生産性を高めるための回避策も知りません。
テストユーティリティをこのように共有すべきではないと信じている人のために...
この問題は、テスト ユーティリティを別のモジュールにリファクタリングすることによって解決する必要があるベスト プラクティスの問題として特徴付けられています。私はこの観点を尊重しますが、そのガイダンスに従おうとすると、DRY (Don't Repeat Yourself) やパッケージ間の循環依存関係など、他のベスト プラクティスに違反することを余儀なくされていることに気付きました。
モジュールの効果的なテストを支援し、そのモジュールに依存するモジュールの開発中に、テスト ユーティリティが出現することはよくあることです。これらのユーティリティが別のモジュールに引き出されると、これによりサイクルが作成されます。さらに、これらのユーティリティの一部は、そのモジュールに依存する他のモジュールをテストするときにも同様に役立ちます。これらのユーティリティが依存関係の新しいテスト モジュールにコピーされると、重複するコードが作成されます。この理由が、Maven の「test-jar」サポートが最初に追加された理由である可能性があります。