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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

3030閲覧

mavenを使ったビルド時、失敗するはずのないJunitテストの結果がfailureになってしまい、ビルドができません

HARUKA_I

総合スコア6

JUnit

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2018/06/08 04:54

編集2018/06/08 05:03

前提・実現したいこと

Javaで作成したwebアプリケーションをビルドしたいが、mavenを使ってビルドしようとした際、
あるJunitを使ったテストで、いくつかのテスト結果がfailureになってしまう。(エラーが出るテストクラスを単体でmavenを使わずに実行すると、結果は全てsuccessになる。)
単体で実行すると全てsuccessになるのに、なぜmavenを使ったビルドの中でテストを行うとfailureになってしまうのかがわからない。

発生している問題・エラーメッセージ

------------------------------------------------------- T E S T S ------------------------------------------------------- Running model.FileModelTest Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.631 sec Running model.RinriModelTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec Running model.SaveModelTest Tests run: 14, Failures: 6, Errors: 0, Skipped: 0, Time elapsed: 48.116 sec <<< FAILURE! testMatchWardNumber(model.SaveModelTest) Time elapsed: 0.507 sec <<< FAILURE! java.lang.AssertionError: expected:<NOT_MATCH_WARD_NUMBER> but was:<NOT_INPUT_BASIC_INFO> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) at org.junit.Assert.assertEquals(Assert.java:118) at org.junit.Assert.assertEquals(Assert.java:144) at model.SaveModelTest.testMatchWardNumber(SaveModelTest.java:105) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) testSuccessHspXls(model.SaveModelTest) Time elapsed: 0.26 sec <<< FAILURE! java.lang.AssertionError: expected:<0> but was:<1> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) at org.junit.Assert.assertEquals(Assert.java:645) at org.junit.Assert.assertEquals(Assert.java:631) at model.SaveModelTest.testSuccessHspXls(SaveModelTest.java:125) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) ・・・以下、同様のエラー

Junitテストを単体実行した際の結果
Junitテストを単体実行した際の結果

該当のソースコード

コメントアウトをしてからビルドするなどして確認した結果、このメソッドを使うとこの事象が起きる事がわかった。

Java

1public boolean isCorrectCity(String stateNumber,String municipality) throws IOException{ 2 3 //都道府県番号から市区町村リストを作成 4 File f = new File("/resource/市区町村名マスタ.csv"); 5 BufferedReader br = new BufferedReader(new FileReader(f)); 6 7 String[][] data = new String[47][300]; 8 String line = br.readLine(); 9 for (int row = 0; line != null; row++) { 10 data[row] = line.split(",", 0); 11 line = br.readLine(); 12 } 13 br.close(); 14 15 //調査票記入内容が市区町村リストに含まれているか判定 16 for(int row = 0; row < data.length; row++) { 17 if(data[row][0].trim().contains(stateNumber)){//都道府県番号が合致する行を検索(CSVから取得した値に謎の空白がある場合があるので、containsで判定) 18 if(Arrays.asList(data[row]).contains(municipality)){//都道府県番号合致行に入力された市区町村名が含まれているか判定 19 return true; 20 }else{ 21 return false; 22 } 23 } 24 } 25 return false; 26 } 27

試したこと

  • PC再起動
  • ~/.m2/repository内ファイルの削除、maven再実行
  • ワークスペース再作成、maven再実行

補足情報(FW/ツールのバージョンなど)

  • JavaSE-1.8
  • Maven3.3.9
  • junit4.12

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

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

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

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

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

kochoru

2018/06/08 06:59

mvn test 時のリソース読み込み先が、src/main/resources 以下は読み込まれず、src/test/resources 以下のみ読み込まれるとかあったと思います。そちらは試してみましたか?
guest

回答1

0

自己解決

以下コードのBufferedReaderを使用している部分の修正をした結果、正常にビルドできるようになりました。

Java

1public boolean isCorrectCity(String stateNumber,String municipality) throws IOException{ 2 3 //都道府県番号から市区町村リストを作成 4 File f = new File("/resource/市区町村名マスタ.csv"); 5 6 //BufferedReader br = new BufferedReader(new FileReader(f)); 7 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f),"UTF-8")); 8 9 String[][] data = new String[47][300]; 10 String line = br.readLine(); 11 for (int row = 0; line != null; row++) { 12 data[row] = line.split(",", 0); 13 line = br.readLine(); 14 } 15 br.close(); 16 17 //調査票記入内容が市区町村リストに含まれているか判定 18 for(int row = 0; row < data.length; row++) { 19 if(data[row][0].trim().contains(stateNumber)){//都道府県番号が合致する行を検索(CSVから取得した値に謎の空白がある場合があるので、containsで判定) 20 if(Arrays.asList(data[row]).contains(municipality)){//都道府県番号合致行に入力された市区町村名が含まれているか判定 21 return true; 22 }else{ 23 return false; 24 } 25 } 26 } 27 return false; 28 } 29 30

解決にあたっては以下のサイトの情報を参考にしました。
MavenからJUnitを実行すると文字化けが発生する件の対応方法

恐らくですが、文字コード指定が

  • Junit単体実行時、ローカル開発環境でのwebアプリ実行時は、eclipseで指定しているためUTF-8
  • Mavenでの実行時はwindowsでのjava実行時の標準文字コードであるMS932

になっており、
CSVファイルを読み込む際の文字コードを明確に指定しないといけなかったのだと思います。

本来であれば、pom.xmlに

pom.xml

1<properties> 2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 3 <java.version>1.8</java.version> 4</properties>

と指定していれば良いはずで、私も指定していたのですが、何故かうまくいきませんでした。

投稿2018/06/08 09:01

HARUKA_I

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問