質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

19094閲覧

【Java】JUnitテストクラスの実行ができなくて困っています

karakorum

総合スコア20

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/03/20 07:15

編集2020/03/20 15:18

javaの基礎を"スッキリわかるJava入門 実践編"で勉強中の初心者です。

●環境
・java version 13.0.2
・Atom 1.44.0
・script 3.25.0
・jdk 13.0.2
・JUnit junit-4.13.jar
●OS :windows10

###質問内容
JUnitを用いたテストをするために、テストクラスを作成しました。
https://junit.org/junit4/からjunit-4.13.jarをダウンロード後、テストクラスと同じディレクトリに置き、コンパイルと実行を行いました。
コンパイルはうまく通りましたが、実行が上手くいきません。
本や質問サイト、ネットの記事などを参考にエラーの原因を探して、試しましたが、どの方法でもうまくいきません。
方法が分かる方がいれば、教えていただきたいです。

ソースコード

P420

1import static java.lang.System.out; 2import org.junit.Test; 3import static org.junit.Assert.*; 4 5public class P420{ 6 @Test public void instantiate(){ 7 P410 a=new P410("ミナト",30000); 8 assertEquals("ミナト",a.owner); 9 assertEquals(30000,a.balance); 10} 11 @Test public void transfer(){ 12 P410 b=new P410("ミナト",30000); 13 P410 c=new P410("ハヤシ",30000); 14 b.transfer(c,10000); 15 assertEquals(20000,b.balance); 16 } 17}

P410

1import static java.lang.System.out; 2 3public class P410{ 4 String owner; 5 int balance; 6 public P410(String owner,int balance){ 7 this.owner=owner; 8 this.balance=balance; 9 } 10 public void transfer(P410 dest,int amount){ 11 dest.balance += amount; 12 this.balance -= amount; 13 } 14} 15

コンパイルと実行

> javac -cp junit-4.13.jar P420.java P410.java > java -cp junit-4.13.jar org.junit.runner.JUnitCore P420 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 JUnit version 4.13 .E Time: 0.002 There was 1 failure: 1) initializationError(org.junit.runner.JUnitCommandLineParseResult) java.lang.IllegalArgumentException: Could not find class [P420] 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: P420 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:416) 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

###試したこと
https://freitech.xsrv.jp/hobby/2018/04/07/post-177/
このサイトより、「@Testを付けたメソッドをテストメソッド内で呼ぶとinitializationErrorが起こる」
➡自分の作ったテストクラスでは、@Testを付けたメソッドをテストメソッド内で読んでいない。

・mainメソッドを入れて、普通にコンパイルと実行
➡問題なくできたので、基本の構文自体が間違っているわけではない。

・違う方法で、コンパイルと実行
javac P420.java P410.java
java org.junit.runner.JUnitCore P420

java -cp .;junit-4.10.jar org.junit.runner.JUnitCore P420

➡どちらもうまくいかない

###追記
回答を踏まえて次の2つの方法で再度実行。➡うまくいかなかった。

> java -cp .;junit-4.13.jar;hamcrest-core-1.3.jar org.junit.runner.JUnitCore P420 使用方法: java [options] <mainclass> [args...] (クラスを実行する場合) または java [options] -jar <jarfile> [args...] (jarファイルを実行する場合) または java [options] -m <module>[/<mainclass>] [args...] java [options] --module <module>[/<mainclass>] [args...] (モジュールのメイン・クラスを実行する場合) または java [options] <sourcefile> [args] (単一のソースファイル・プログラムを実行する場合) メイン・クラス、ソース・ファイル、-jar <jarfile>、 -mまたは--module <module>/<mainclass>に続く引数は、メイン・クラスへの引数として 渡されます。 オプションは次のとおりです: -cp <ディレクトリおよびzip/jarファイルのクラス検索パス> -classpath <ディレクトリおよびzip/jarファイルのクラス検索パス> --class-path <ディレクトリおよびzip/jarファイルのクラス検索パス> ;区切りリスト(ディレクトリ、JARアーカイブ、 ZIPアーカイブ)で、クラス・ファイルの検索用。 -p <module path> --module-path <module path>... ディレクトリの;区切りリスト、各ディレクトリ はモジュールのディレクトリです。 --upgrade-module-path <module path>... ディレクトリの;区切りリスト、各ディレクトリ は、ランタイム・イメージ内のアップグレード可能な モジュールを置換するモジュールのディレクトリです --upgrade-module-path <module path>... ディレクトリの;区切りリスト、各ディレクトリ は、ランタイム・イメージ内のアップグレード可能な モジュールを置換するモジュールのディレクトリです --add-modules <module name>[,<module name>...] 初期モジュールに加えて解決するルート・モジュール。 <module name>には次も指定できます: ALL-DEFAULT、ALL-SYSTEM、 ALL-MODULE-PATH. --list-modules 参照可能なモジュールをリストし終了します -d <module name> --describe-module <module name> モジュールを説明し終了します --dry-run VMを作成しメイン・クラスをロードしますが、メイン・メソッドは実行しません。 --dry-runオプションは、次の検証に役立つ場合があります: モジュール・システム構成などのコマンド行オプション。 --validate-modules すべてのモジュールを検証し終了します --validate-modulesオプションは、次の検索に役立つ場合があります: モジュール・パス上のモジュールでの競合およびその他のエラー。 -D<name>=<value> システム・プロパティを設定します -verbose:[class|module|gc|jni] 特定のサブシステムで詳細出力を有効にする -version 製品バージョンをエラー・ストリームに出力して終了します --version 製品バージョンを出力ストリームに出力して終了します -showversion 製品バージョンをエラー・ストリームに出力して続行します --show-version 製品バージョンを出力ストリームに出力して続行します --show-module-resolution 起動時にモジュール解決出力を表示します -? -h -help このヘルプ・メッセージをエラー・ストリームに出力します --help このヘルプ・メッセージを出力ストリームに出力します -X 追加オプションのヘルプをエラー・ストリームに出力します --help-extra 追加オプションのヘルプを出力ストリームに出力します -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] 指定した粒度でアサーションを有効にします -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] 指定した粒度でアサーションを無効にします -esa | -enablesystemassertions システム・アサーションを有効にします -dsa | -disablesystemassertions システム・アサーションを無効にします -agentlib:<libname>[=<options>] ネイティブ・エージェント・ライブラリ<libname>をロードします。例: -agentlib:jdwp -agentlib:jdwp=helpも参照してください -agentpath:<pathname>[=<options>] フルパス名を使用して、ネイティブ・エージェント・ライブラリをロードします -javaagent:<jarpath>[=<options>] Javaプログラミング言語エージェントをロードします。java.lang.instrumentを参照してください -splash:<imagepath> 指定されたイメージを含むスプラッシュ画面を表示します HiDPIスケールのイメージが自動的にサポートされて使用されます (可能な場合)。スケーリングされないイメージのファイル名(image.extなど)を 引数として-splashオプションに必ず渡す必要があります。 指定された最も適切なスケーリング済イメージが選択されます (自動的)。 詳細は、SplashScreen APIのドキュメントを参照してください @argumentファイル オプションを含む1つ以上の引数ファイル -disable-@files さらなる引数ファイル拡張を無効にします --enable-preview クラスをこのリリースのプレビュー機能に依存させることができます 長いオプションの引数を指定する場合、--<name>=<value>または --<name> <value>を使用できます。 junit-4.13.jar : 用語 'junit-4.13.jar' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パ スが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 発生場所 行:1 文字:12 + java -cp .;junit-4.13.jar;hamcrest-core-1.3.jar org.junit.runner.JUni ... + ~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (junit-4.13.jar:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException hamcrest-core-1.3.jar : 用語 'hamcrest-core-1.3.jar' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されているこ とを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 発生場所 行:1 文字:27 + java -cp .;junit-4.13.jar;hamcrest-core-1.3.jar org.junit.runner.JUni ... + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (hamcrest-core-1.3.jar:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException Suggestion [3,General]: コマンド hamcrest-core-1.3.jar は見つかりませんでしたが、現在の場所に存在します。Windows PowerShell は、既定では、現在の場所からコマンドを読み込みません。この コマンドを信頼する場合は、".\hamcrest-core-1.3.jar" と入力してください。詳細については、"get-help about_Command_Precedence" と入力してヘルプを参照してください。
> java -cp C:\java\book_javaPractice\14Chapter* org.junit.runner.JUnitCore P420 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 JUnit version 4.13 .E Time: 0.003 There was 1 failure: 1) initializationError(org.junit.runner.JUnitCommandLineParseResult) java.lang.IllegalArgumentException: Could not find class [P420] 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: P420 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:416) 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

atomとコマンドプロンプトでコンパイル、実行等をしているのですが

ここかな。

悪いのですが、Windows10のatomのコマンドプロンプトには、詳しくありません。

java(javac)コマンドに、-cpオプションでクラスパスを渡しますが、複数のパスを渡すときの区切り文字は環境により異なります。システムプロパティのfile.path.separator。jshellなどでSystem.getProperty("path.separator")で確認できます。Windowsのコマンドプロンプトではクラスパスの区切りがセミコロン(;)です。Linuxや、gitbash、WSL(Windows Subsystem for Linux)の環境ではコロン(:)となります。手元に環境がないので、Windows10のatomのコマンドプロンプトではどうなのかは、わかりません。

追記部分を引用

> java -cp .;junit-4.13.jar;hamcrest-core-1.3.jar org.junit.runner.JUnitCore P420 使用方法: java [options] <mainclass> [args...] (クラスを実行する場合) または java [options] -jar <jarfile> [args...]

追記されたメッセージをみた感じでは、atomのコマンドプロンプトでは、もしかしたらコロンなのかな、と。その理由は、Linux、gitbash、WSLの環境ではセミコロンはコマンドを羅列するときの区切りだからです。つまり、セミコロンで区切って、java -cp .を実行しようとしているから、javaコマンドは引数が足りないとして、使用方法を表示している、のではないかと。

セミコロンをコロンに変えたらどうなるでしょうか。

> java -cp .:junit-4.13.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore P420

もしくは、Windowsのコマンドプロンプトから、セミコロンのままで実行したらどうなるでしょうか。

dos> java -cp .;junit-4.13.jar;hamcrest-core-1.3.jar org.junit.runner.JUnitCore P420

投稿2020/03/21 02:51

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karakorum

2020/03/21 13:21

改めて回答していただきありがとうございます。 まず、教えていただいた System.getProperty("path.separator")でコマンドプロンプトとatomで区切り文字を確認したところ、いずれもセミコロン;でした。 atomで、セミコロンをコロンに変えて実行してみましたが、また違うエラーが出てきました。↓ エラー: メイン・クラスorg.junit.runner.JUnitCoreを検出およびロードできませんでした 原因: java.lang.ClassNotFoundException: org.junit.runner.JUnitCore その後、コマンドプロンプトにて、 java -cp .;junit-4.13.jar;hamcrest-core-1.3.jar org.junit.runner.JUnitCore P420 と、セミコロンのまま実行してみたら、エラーなく実行することができました!  atomでは実行はできなかったので、Junitに関して今後はコマンドプロンプトで実行していこうと思います! 一個前の回答をもらった時点で全てパターンは試したつもりだったのですが、 結局最初に教えていただいたコマンドで実行することができました。 色々とお手数おかけしました。 とても助かりました! ありがとうございました!
shiketa

2020/03/21 15:20

atomでもいいとはおもますが、Eclipse, IntelliJ/IDEA, NetBeansなどのIDEも使えるようになると、テストももっと簡単に(ボタン一発で)実行できるようになりますよ。 もちろん、コマンドプロンプトからでも実行できるようになっておくことも大事なことですけれど。
karakorum

2020/03/22 00:39

基礎学習が終わったら、ちょっとずつEclipseなども使ってみたいと思います!
guest

0

まず、コンパイル前のディレクトリ構成。

├── P410.java ├── P420.java ├── junit-4.13.jar

で、コンパイルして、その結果。

> javac -cp junit-4.13.jar P420.java P410.java ├── P410.class ├── P410.java ├── P420.class ├── P420.java ├── junit-4.13.jar

で、あなたが実行したコマンド。そして、実行時にこういうエラーが出たのではありませんか?

> java -cp .;junit-4.13.jar org.junit.runner.JUnitCore P420 JUnit version 4.13 Exception in thread "main" java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

Download and Install をみると、hamcrest-core.jarも必要そう。

├── P410.class ├── P410.java ├── P420.class ├── P420.java ├── hamcrest-core-1.3.jar ├── junit-4.13.jar

で、クラスパスにhamcrest-core-1.3.jarも追加して実行。

> java -cp .;junit-4.13.jar;hamcrest-core-1.3.jar org.junit.runner.JUnitCore P420 JUnit version 4.13 .. Time: 0.011 OK (2 tests)

テストを実行できました。そして、テストは成功しました。おめでとう。

投稿2020/03/20 13:20

編集2020/03/20 13:24
shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karakorum

2020/03/20 13:49

丁寧にご回答いただきありがとうございます。 hamcrest-core-1.3.jarも同じディレクトリに置き、実行してみましたが、 上記のinitializationErrorから始まる長いエラーが解消されませんでした・・・。 atomとコマンドプロンプトでコンパイル、実行等をしているのですが、それが悪いかもしれないですね・・・。
shiketa

2020/03/20 14:43

長〜〜いエラーメッセージはまったく同じなのですか?`Caused by: java.lang.ClassNotFoundException: P420`となっているのですか?もし、そうなのであれば、クラスパスをよ〜〜〜〜〜〜〜く、確認してみてください。`.;junit-4.13.jar;hamcrest-core-1.3.jar`としていますか?
karakorum

2020/03/20 15:21

すいません正確には、教えていただいた java -cp .;junit-4.13.jar;hamcrest-core-1.3.jar org.junit.runner.JUnitCore P420 では、また違うエラーが出てしまったので、 java -cp C:\java\book_javaPractice\14Chapter* org.junit.runner.JUnitCore P420 と実行した結果、同じエラーが出てしまいました。 これらのエラーの詳細は、元の質問に追記しました。 hamcrest-core-1.3.jarも同じディレクトリに置いています。 お手数かけします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問