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

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

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

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

Java

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

Q&A

0回答

3504閲覧

JunitのassertThatの使い方

jin007

総合スコア34

JUnit

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

Java

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

0グッド

1クリップ

投稿2019/07/08 08:08

編集2019/07/11 09:07

実現したいこと

assertThatを使いList型の返却値(スタブ)と値を比較して一致していたらテスト成功というようにしたい。

▼テスト対象クラス

java

1public class fruit { 2 3 public List<HashMap<String, String>> whatFruit(){ 4 //List<HashMap<Stirng, String>> resultFruit = new ArrayList<HashMap<String, String>>(); 5 //resultFruit.add("APPLE", "NAGANO"); 6 //resultFruit.add("STRAWBERRY", "TOCHIGI"); 7 //resultFruit.add("CHERRY", "YAMAGATA"); 8 9    /* 以下修正文 */ 10 HashMap<String, String> fruitMap = new HashMap<String, String>(); 11 List<HashMap<String, String>> fruitList = new ArrayList<HashMap<String, String>>(); 12 fruitMap.put("APPLE", "NAGANO"); 13 fruitMap.put("STRAWBERRY", "TOCHIGI"); 14 fruitMap.put("CHERRY", "YAMAGATA"); 15 fruitList.add(fruitMap); 16 17 //return resultFruit; 18 /* 以下修正文 */ 19 return fruitList; 20 } 21}

▼テストソース

java

1fruitTest.java 2 3public class fruitTest { 4 5fruit fr = new fruit(); 6 7 new Expections() {{ 8 fr.whatFruit(); 9 result = "スタブ"; 10 }}; 11 12 assertThat(fr.whatFruit(), is("スタブ")); 13 14}

エラー箇所

fruitTest.javaの

java

1assertThat(fr.whatFruit(), is("スタブ"));

で、「型 MatcherAssert のメソッド assertThat(T, Matcher<? super T>) は引数 (List<HashMap<String,String>>, Matcher<String>) に適用できません」

とエラーが出ます。

「result = "スタブ";」で返却値を指定しているのでこのまま比較できるのかと思いました。
しかしList型なので比較できません。

他に実施したこと

java

1assertThat(result, is("スタブ"));

⇒当然resultを変数として認識されているのでエラー

参考にしたサイト

http://tomoyamkung.net/2013/08/26/java-junit-list-assert/
https://www.sejuku.net/blog/15487
※URL直貼りすみません。。。何回もリロードしたのですがリンク設定ができなくて。。
⇒調査中に参考にしたサイトは、以上ですがLISTの中身を確認したいのではない為趣旨がズレていたので参考になりませんでした。

他に気になること

また、エラーと同時に以下のインポートも出現するのでクリックするのですがインポートできません。
クリックしても再度assertThatにカーソルを合わせると出てきます。
Add static import for 'Assert.assertThat'
Add static import for 'MatcherAssert.assertThat'

この理由は何でしょうか。

よろしくお願いいたします。

追記

ソース修正いたしました。
過去に私自身が質問していたところをミスしていました。お恥ずかしい限りです。。

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

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

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

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

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

rubytomato

2019/07/08 12:56

List<HashMap<Stirng, String>> resultFruit = new ArrayList<HashMap<String, String>>(); resultFruit.add("APPLE", "NAGANO"); すくなくとも2カ所コードの書き方に問題がありコンパイルエラーが起きていると思います。IDE上でエラーは確認できませんか? ご確認ください。
jin007

2019/07/09 01:18

ソース修正いたしました! ご指摘有難うございます。以前も間違えたところなのでお恥ずかしい限りです。
A-pZ

2019/07/09 04:56

少なくともまだコンパイルエラーが出ている状況です。 また、 new Expections() など、実際にインポートしているクラスのパッケージ名などもソースコードに書くと回答が得られやすいでしょう。
rubytomato

2019/07/09 10:36

コード修正ありがとうございました。ですがA-pZさんがご指摘のとおりまだコンパイルが通らないコードが残っています。 具体的にはテストソースのfruitClassのコードです。この状態では回答が難しいのでご確認ください。 それと細かい点になりますが、テストソース”fruitTest.java"で定義しているクラスはfruitClassということでしょうか?、であればファイル名はFruitTest.java、クラス名はFruitTestにした方が良いかと思います。テスト対象のfruitクラスも同様に修正された方が良いと思います。(この点は本質問とは関係のない話なのでスルーして頂いても大丈夫です)
jin007

2019/07/11 09:09

A-pZさん、rubytomatoさんコメントありがとうございます。 ソースの修正いたしました。よろしくお願いいたします。 クッキーを削除したためログインができませんでした。遅れて申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問