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

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

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

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

2回答

3770閲覧

Juint4 Expected: is <1> but: was <1L> となってしまう

asagi_084

総合スコア16

JUnit

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2018/10/21 04:39

Junit4の独学で勉強をしている最中なのですが、 SQLからlong型のデータを取り出しテストするプログラムを作ってみたのですが、結果が<1>とほしい部分に<1L>と表示されてしまいます。
assertThat(list.getId.is((long)1); を実行すれば欲しい結果が出るのですが、それでは可笑しいといわれてしまい、なにを使えばよいかわからなく、どうテストすればいいのかを教えていただければ幸いです。

SprienBoot

1Repository 2 3package com.example.demo.repositories; 4 5import java.util.List; 6 7import org.springframework.data.jpa.repository.JpaRepository; 8import org.springframework.stereotype.Repository; 9 10import com.example.demo.MailAddressData; 11 12@Repository 13public interface MailAddressDataRepository extends JpaRepository<MailAddressData, Long> { 14 15//名前完全一致。 16public List<MailAddressData>findByName(String name); 17 18 19}

SpringBoot

1Spackage com.example.demo; 2 3import java.util.List; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Service; 7 8import com.example.demo.repositories.MailAddressDataRepository; 9 10/** 11 * コントロールクラスから呼び出される処理が書かれている。 12 */ 13@Service 14public class MailAddressService { 15 16 @Autowired 17 MailAddressDataRepository repository; 18 19 /** 20 * 21 * List<MailAddressData> 全件取得 22 * 23 * @return MailAddressDataの全件 24 */ 25 public List<MailAddressData> getAll(){ 26 return repository.findAll(); 27 } 28 /** 29 * mailaddressdataを保存する save 30 * @param mailaddressdata 31 * @return 32 */ 33 public void saveAndFlush(MailAddressData mailaddressdata) { 34 repository.saveAndFlush(mailaddressdata); 35 } 36 /** 37 * 名前完全一致のみの検索。 38 * 39 * @param name 40 * @return nameに紐づくListのMailAddressData 41 */ 42 public List<MailAddressData> findByName(String name) { 43 return repository.findByName(name); 44 } 45 /** 46 * IDで一件のみ取り出す。 47 * @param id 48 * @return 49 */ 50 public MailAddressData findOne(long id) { 51 return repository.getOne(id); 52 } 53 /** 54 * IDを使いデリートする。 55 * @param id 56 */ 57 public void delete(long id) { 58 repository.delete(id); 59 } 60}

Junit4

1package com.example.demo; 2 3import static org.hamcrest.Matchers.*; 4import static org.junit.Assert.*; 5 6import java.util.List; 7 8import javax.sql.DataSource; 9import javax.validation.ConstraintViolationException; 10 11import org.junit.Before; 12import org.junit.Test; 13import org.junit.runner.RunWith; 14import org.springframework.beans.factory.annotation.Autowired; 15import org.springframework.boot.test.context.SpringBootTest; 16import org.springframework.test.context.junit4.SpringRunner; 17 18import com.ninja_squad.dbsetup.DbSetup; 19import com.ninja_squad.dbsetup.Operations; 20import com.ninja_squad.dbsetup.destination.DataSourceDestination; 21import com.ninja_squad.dbsetup.destination.Destination; 22import com.ninja_squad.dbsetup.operation.Operation; 23 24 25@RunWith(SpringRunner.class) 26@SpringBootTest 27public class MailAddressServiceTest { 28 29 @Autowired 30 DataSource dataSource; 31 32 //データ削除対象テーブル指定 33 public static final Operation DELETE_ALL = 34 Operations.deleteAllFrom("mailaddress"); 35 //テストデータの準備 36 public static final Operation INSERT = 37 Operations.insertInto("mailaddress") 38 .columns("id","pseudonym","name","address") 39 .values(1,"あいうえお","あいうえお","aiueo@yahoo.co.jp") 40 .values(2,"かきくけこ","かきくけこ","kakikukeko@yahoo.co.jp") 41 .values(3,"さしすせそ","さしすせそ","sasisuseso@yahoo.co.jp") 42 .build(); 43 44 /** 45 * ここでは更新と削除を毎回行っている。 46 */ 47 @Before 48 public void before(){ 49 //テストDB接続(Application.propertiesに設定されている情報呼び出し) 50 Destination dest = new DataSourceDestination(dataSource); 51 //実行対象 52 Operation ops = Operations.sequenceOf(DELETE_ALL, INSERT); 53 DbSetup dbSetup = new DbSetup(dest, ops); 54 dbSetup.launch(); 55 } 56 57 @Autowired 58 MailAddressService service; 59 60 61 /** 62 * 取得テスト 63 * テスト対象メソッド:getAll() 64 * 想定値:3件 65 * ok 66 */ 67 @Test 68 public void testgetAll1() { 69 List<MailAddressData> list = service.getAll(); 70 assertThat(list.size(), is(3)); 71 } 72 73 /** 74 * 検索件数取得テスト 75 * テスト対象メソッド:getAll() 76 * 想定値:1,"あいうえお","あいうえお","aiueo@yahoo.co.jp" 77 * 想定値:2,"かきくけこ","かきくけこ","kakikukeko@yahoo.co.jp" 78 * 想定値:3,"さしすせそ","さしすせそ","sasisuseso@yahoo.co.jp" 79 * 80 *上でいれたデータが正常に入っているかのテスト 81 * 82 / 83 84 @Test 85 public void testgetAll2() { 86 List<MailAddressData> list = service.getAll(); 87 assertThat(list.get(0).getId(),is(1)); 88 assertThat(list.get(0).getName(), is("あいうえお")); 89 assertThat(list.get(0).getPseudonym(), is("あいうえお")); 90 assertThat(list.get(0).getAddress(), is("aiueo@yahoo.co.jp")); 91 92 assertThat(list.get(1).getId(), is("2")); 93 assertThat(list.get(1).getName(), is("かきくけこ")); 94 assertThat(list.get(1).getPseudonym(), is("かきくけこ")); 95 assertThat(list.get(1).getAddress(), is("kakikukeko@yahoo.co.jp")); 96 97 assertThat(list.get(2).getId(), is("3")); 98 assertThat(list.get(2).getName(), is("さしすせそ")); 99 assertThat(list.get(2).getPseudonym(), is("さしすせそ")); 100 assertThat(list.get(2).getAddress(), is("sasisuseso@yahoo.co.jp")); 101 102 } 103
エラー内容 java.lang.AssertionError: Expected: is <1> but: was <1L> at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20) at org.junit.Assert.assertThat(Assert.java:956) at org.junit.Assert.assertThat(Assert.java:923) at com.example.demo.MailAddressServiceTest.testgetAll2(MailAddressServiceTest.java:87) 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:498) 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.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 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.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

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

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

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

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

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

guest

回答2

0

assertThat(list.getId.is((long)1); を実行すれば欲しい結果が出るのですが、それでは可笑しいといわれてしまい

そこまでおかしくないと思うのですが、is(1L)と書いてくれ…という意味合いなのでしょうか。

投稿2018/10/21 04:49

maisumakun

総合スコア145183

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

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

asagi_084

2018/10/21 04:58

初めまして、こんにちは。 私もおかしくないと思い、聞いたのですが、違うといわれてしまい困惑しています。 (long)と書かなきゃいけない自体が不思議と思わなくてはいけないと。 言われどういう事だろうと調べているのですが、正しい答えにたどりつけません。
退会済みユーザー

退会済みユーザー

2018/10/21 05:13

getIdの型をintにすべきという意味カナ?(蛇足だけど、聞いた人の返事の仕方がいかにもな感じ…)
asagi_084

2018/10/21 05:23

初めまして、こんにちは。 @Entityの private long id; をintに変えget、setをint型にし、実行してみた所うまくいったのですが、 この解釈で会っていますか? お時間があればお教えください。
退会済みユーザー

退会済みユーザー

2018/10/21 05:33

詳しくはないので、おそらく…という感じです。idがlongでなくてよいのであれば…ですが。(横から失礼しました)
asagi_084

2018/10/21 05:48

いえいえ、アドバイスや指摘ありがたいです。 今回作成しているアドレス帳なのですが、特にメールアドレスと名前が表示でき、追加機能を自己でつけていくという形なので特に問題ないと思うのですが・・・。 明日レビュー担当の方ともう一度話してみます。
asagi_084

2018/10/21 06:00

テストの為にプログラムを変えるのはよくないといわれていたので、よけい困惑しておりました。
rubytomato

2018/10/21 09:14

おかしいという指摘は、わざわざキャストしていることに対してだと思いますが、レビュアーに確認される前に、"Java 数値リテラル 書き方"などのキーワードで、事前に調べておいてからお話されるといいと思います。
退会済みユーザー

退会済みユーザー

2018/10/21 09:31

なるほど確かに。 > rubytomatoさん
guest

0

ベストアンサー

MailAddressData の実装が書かれていないので予想でしかありませんが、 getId() の戻り値がLongであれば、テストの検証側もLongに揃えなければ型が異なっているため、Junit4のassertはfailureと判断します。

数値型で特に何も指定していない場合は int になるため、同じLong型ないしはプリミティブ型のlongを指定しないと、型が同じであると判断しません。
(オートボクシングをするため、例えば、5L でも 5l でも可能です)

投稿2018/10/21 12:46

A-pZ

総合スコア12011

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

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

退会済みユーザー

退会済みユーザー

2018/10/21 13:16

リポジトリをみる限りではLong確定ですよ。 ジェネリックの二つ目はIDに当たるので型が違ったら何かしら起動時もしくは実行時にに警告か例外が出たはず。(わざわざ変えないから覚えてない)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問