JUnitのテストで嵌ったパス指定
はじめに
今回、Javaでの開発中にテストを行うため、テストクラスを作成しました。
そして、JUnitCore
の実行を行う際にパス指定を行うのですが、記述方法で躓いたのでまとめておこうと思います。
~注意~
開発環境や Shell などの違いで予想と異なる結果の場合があるかもしれません。
下記環境を参照.
環境
- macOS 11.0.1
- JDK 11.0.10
- JUnit 4.13.2
- vscode 1.54.3
前提条件
Javaプロジェクトの src 直下に移動
注意:上記のプロジェクト構成の場合
cd ~/Workspace/Java/Project/src
問題点
下記を実行するとエラーが出力される。
java -cp ../lib/junit-4.13.2.jar:../lib/hamcrest-core-1.3.jar: org.junit.runner.JUnitCore com/test/MainTest
コンパイルの段階ではパスは通っていたのだけれど...
詳しい原因はわからないが、おそらく、Could not find class [com/test/MainTest]
が問題だと思われる。
JUnit version 4.13.2
.E
Time: 0.002
There was 1 failure:
1) initializationError(org.junit.runner.JUnitCommandLineParseResult)
java.lang.IllegalArgumentException: Could not find class [com/test/MainTest]
at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:100)
at org.junit.runner.JUnitCommandLineParseResult.parseArgs(JUnitCommandLineParseResult.java:50)
at org.junit.runner.JUnitCommandLineParseResult.parse(JUnitCommandLineParseResult.java:44)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:72)
at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
Caused by: java.lang.ClassNotFoundException: com/test/MainTest
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at org.junit.internal.Classes.getClass(Classes.java:42)
at org.junit.internal.Classes.getClass(Classes.java:27)
at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:98)
... 4 more
FAILURES!!!
Tests run: 1, Failures: 1
解決方法
MainTest
クラスをパスを指定する際、以下のように/
で区切ることもできるが、
JUnitCore
の実行を行う際は、com.test.MainTest
のように.
で区切る必要がある。
また、junit-4.13.2.jar
とhamcrest-core-1.3.jar
の間の:
の左右にスペースはいれてはいけない。
もし入れていた場合はエラーとなるためエラーが出た場合は確認してほしい。
- 失敗例
java -cp ../lib/junit-4.13.2.jar:../lib/hamcrest-core-1.3.jar: org.junit.runner.JUnitCore com/test/MainTest
- 成功例
java -cp ../lib/junit-4.13.2.jar:../lib/hamcrest-core-1.3.jar: org.junit.runner.JUnitCore com.test.MainTest
成功例では以下のように示される。
JUnit version 4.13.2
.
Time: 0.007
OK (1 test)
JUnitCore
の実行時に.jar
を分けて記述したため冗長になったが、下記のようにワイルドカードを使うことで、簡略化して記述できる。
java -cp ../lib/*.jar: org.junit.runner.JUnitCore com.test.MainTest
さいごに
今回は意外なところで嵌ってしまったので、よい勉強になりました。
ネット上で検索しても解決方法がなかなか見つからなかったので、苦労しました。
けれど、同じようなことで解決できていない方の助けになれば幸いです。
最近は、vscode を使って Java 開発をしているのですが、Eclipse などの IDE と違って細かな違いに慣れるのに苦労しています。
Author And Source
この問題について(JUnitのテストで嵌ったパス指定), 我々は、より多くの情報をここで見つけました https://qiita.com/work16087y0rha/items/f432527875dfa7dc6b0f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .