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

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

ただいまの
回答率

90.74%

  • Eclipse

    1599questions

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

  • JUnit

    176questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 144

HARUKA_I

score 2

 前提・実現したいこと

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テストを単体実行した際の結果

 該当のソースコード

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

public boolean isCorrectCity(String stateNumber,String municipality) throws IOException{

        //都道府県番号から市区町村リストを作成
        File f = new File("/resource/市区町村名マスタ.csv");
        BufferedReader br = new BufferedReader(new FileReader(f));          

        String[][] data = new String[47][300];          
        String line = br.readLine();          
        for (int row = 0;  line != null; row++) {
            data[row] = line.split(",", 0);    
            line = br.readLine();    
            }
        br.close();        

        //調査票記入内容が市区町村リストに含まれているか判定    
        for(int row = 0; row < data.length; row++) {
            if(data[row][0].trim().contains(stateNumber)){//都道府県番号が合致する行を検索(CSVから取得した値に謎の空白がある場合があるので、containsで判定)
                if(Arrays.asList(data[row]).contains(municipality)){//都道府県番号合致行に入力された市区町村名が含まれているか判定
                    return true;
                    }else{
                        return false;
                        }
                }
            }
        return false;    
        }

 試したこと

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

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

  • JavaSE-1.8
  • Maven3.3.9
  • junit4.12
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kochoru

    2018/06/08 15:59

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

    キャンセル

回答 1

check解決した方法

0

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

public boolean isCorrectCity(String stateNumber,String municipality) throws IOException{

        //都道府県番号から市区町村リストを作成
        File f = new File("/resource/市区町村名マスタ.csv");

        //BufferedReader br = new BufferedReader(new FileReader(f));
          BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f),"UTF-8"));

        String[][] data = new String[47][300];          
        String line = br.readLine();          
        for (int row = 0;  line != null; row++) {
            data[row] = line.split(",", 0);    
            line = br.readLine();    
            }
        br.close();        

        //調査票記入内容が市区町村リストに含まれているか判定    
        for(int row = 0; row < data.length; row++) {
            if(data[row][0].trim().contains(stateNumber)){//都道府県番号が合致する行を検索(CSVから取得した値に謎の空白がある場合があるので、containsで判定)
                if(Arrays.asList(data[row]).contains(municipality)){//都道府県番号合致行に入力された市区町村名が含まれているか判定
                    return true;
                    }else{
                        return false;
                        }
                }
            }
        return false;    
        }


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

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

  • Junit単体実行時、ローカル開発環境でのwebアプリ実行時は、eclipseで指定しているためUTF-8
  • Mavenでの実行時はwindowsでのjava実行時の標準文字コードであるMS932
    になっており、
    CSVファイルを読み込む際の文字コードを明確に指定しないといけなかったのだと思います。

本来であれば、pom.xmlに

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.74%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Eclipse

    1599questions

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

  • JUnit

    176questions

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

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