私は、java 9ジグソーパズルモジュールを使用してJava 11にクラスパスを使用して、Java 10からjarプロジェクトを移行しています。プロジェクトのJUnit5テストがあります。試験依存関係は達人によって試験範囲に設けられています。どのようにすべてのパッケージをテストするために開くが、モジュールが別のプロジェクトで使用されたときに開けないで作るには?
ジャープロジェクトは、ちょうど他のプロジェクト(必要ありませんので、メインクラス)のために(ユーティリティプロジェクトなどの)いくつかのクラスを提供しています。
プロジェクトは5つのでパッケージを持って/ srcに/メイン/ javaの/ A / B / C /。それらの2には、このjarファイルを使用したプロジェクトのためにアクセス可能でなければなりません。他の3は(アクセス可能なもので使用される)内部でのみ使用されています。試験は、に位置している/ SRC /試験/ジャワ/ A / B / C /。テストは、このジャーを使用してプロジェクトに関連していないので、これらの試験は、試験範囲内に設けられた依存関係(JUnitの、mockito、がjunt-paramsは)を有します
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
私が提供したmodule-info.javaをで/ / srcに/メイン/ジャワ:
module moduleName {
requires java.base;
exports a.b.c.package1;
exports a.b.c.package3;
}
予想されるようになりましたパッケージ1と3の公共のクラスは(私はまだこれを確認することができていない)他のプロジェクトにアクセスできる必要があります。
abcpackage1.collections.SomeTest()アクセス可能にすることができません:java.lang.reflect.InaccessibleObjectExceptionで結果になりましたテストの実行モジュールmoduleNameのにはないことは6a84a97d @無名のモジュールへの「abcpackage1開きます」
(と私はパッケージを開いたときに開く)のすべての実行がスムーズ。しかし、今、すべてのパッケージが開かれています。私は(これだけエクスポート)反射のために開いてはならないパッケージ2、図4及び図5のみにアクセスしながら試験および1と3であることを期待します。
Mavenのは、私に告げるので、私は、と思うようになった無名のモジュールを @ 6a84a97d、これはテスト用に作成されたモジュールであるかもしれません。それは私が追加してみてください作っmodule-info.javaをで/ / srcに/テスト/ javaのテストのために。
module moduleNameTest {
requires moduleName; // the code to test
requires java.base; // java.base could be transient on moduleName
// test dependencies
requires org.junit.jupiter.api;
requires org.junit.jupiter.params;
}
今のMaven(3.5.4)の状態:
src/test/java/module-info.java:[3,20] module not found: moduleName
src/test/java/module-info.java:[4,31] module not found: org.junit.jupiter.api
src/test/java/module-info.java:[5,31] module not found: org.junit.jupiter.params
テクノロジー:
- javaのOpenJDKの11
- MVN 3.5.4
- JUnitの5.3.0
- シュアプラグイン3.0.0-M3
- mockito 2.21.0
先に述べたように、私はテストとMavenで瓶を構築する上で実行するテストの間、パッケージ2、4と5のみアクセスできるように期待しています。パッケージ1と3は、(これだけ開いていないエクスポート)反射のためのオープン他のプロジェクトで使用するためにエクスポートではなく、する必要があります。
追加情報が必要な場合はお気軽にお問い合わせください。
前もって感謝します
ケビン
、ケビン・テスト「ではザ・モジュラー・ワールドへようこそ」。
私はここでそのトピックに関するブログをまとめ:https://github.com/sormuras/testing-in-the-modular-world
それはホワイトボックステストに来るとき基本的に、あなたはどちらかのモジュールシステムを微調整する必要があるテストのコンパイルやテスト・ランタイムによってバイパスモジュールシステムの障壁をするフレームワークをテストできるようにします。
私はあなたが正しい軌道に乗っている、と思います...多分シュアは、間違ったことをしますか?与えたいhttps://github.com/sormuras/junit-platform-maven-plugin私はショットを書きましたの?このプラグイン支持体は黒色とホワイトボックスは、箱から出してのテスト。あなたが提供する場合には特に、このプラグインは、輝くtest/java/module-info.java
テストモジュール記述子を。
モジュラーテストを整理する方法については、この「絵」を参照してくださいすることなく、メインモジュール記述子に触れました:
src ├── main │ └── java │ ├── foo │ │ ├── PackageFoo.java │ │ └── PublicFoo.java │ └── module-info.java <------------------ module foo { exports foo; } ├── test │ └── java .--- open module foo { │ ├── foo / exports foo; │ │ └── PackageFooTests.java / requires org.junit.jupiter.api; │ └── module-info.[java|test] <----< } └── it \ └── bar °---- --add-reads └── src foo=org.junit.jupiter.api └── test --add-opens └── java foo/foo=org.junit.platform.commons ├── bar │ └── PublicFooTests.java └── module-info.java <------ open module bar { requires foo; requires org.junit.jupiter.api; }
このパターンは同様にあなたのセットアップに採用するのは簡単でなければなりません。