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

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

ただいまの
回答率

90.36%

  • Spring Boot

    811questions

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

  • JUnit

    211questions

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

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

解決済

回答 2

投稿

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

asagi_084

score 10

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

Repository

package com.example.demo.repositories;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.example.demo.MailAddressData;

@Repository
public interface MailAddressDataRepository extends JpaRepository<MailAddressData, Long> {

//名前完全一致。
public List<MailAddressData>findByName(String name);


}
Spackage com.example.demo;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.repositories.MailAddressDataRepository;

/**
 * コントロールクラスから呼び出される処理が書かれている。
 */
@Service
public class MailAddressService {

        @Autowired
            MailAddressDataRepository repository;

    /**
     *
     * List<MailAddressData> 全件取得
     *
     * @return MailAddressDataの全件
     */
    public List<MailAddressData> getAll(){
        return repository.findAll();
    }
    /**
     * mailaddressdataを保存する save
     * @param mailaddressdata
     * @return
     */
    public void saveAndFlush(MailAddressData mailaddressdata) {
         repository.saveAndFlush(mailaddressdata);
    }
    /**
     * 名前完全一致のみの検索。
     *
     * @param name
     * @return nameに紐づくListのMailAddressData
     */
    public List<MailAddressData> findByName(String name) {
        return repository.findByName(name);
    }
    /**
     * IDで一件のみ取り出す。
     * @param id
     * @return
     */
    public  MailAddressData findOne(long id) {
        return repository.getOne(id);
    }
    /**
     * IDを使いデリートする。
     * @param id
     */
    public void delete(long id) {
        repository.delete(id);
    }
}
package com.example.demo;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

import java.util.List;

import javax.sql.DataSource;
import javax.validation.ConstraintViolationException;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.ninja_squad.dbsetup.DbSetup;
import com.ninja_squad.dbsetup.Operations;
import com.ninja_squad.dbsetup.destination.DataSourceDestination;
import com.ninja_squad.dbsetup.destination.Destination;
import com.ninja_squad.dbsetup.operation.Operation;


@RunWith(SpringRunner.class)
@SpringBootTest
public class MailAddressServiceTest {

    @Autowired
    DataSource dataSource;

    //データ削除対象テーブル指定
        public static final Operation DELETE_ALL =
                Operations.deleteAllFrom("mailaddress");
        //テストデータの準備
        public static final Operation INSERT =
                    Operations.insertInto("mailaddress")
                            .columns("id","pseudonym","name","address")
                            .values(1,"あいうえお","あいうえお","aiueo@yahoo.co.jp")
                            .values(2,"かきくけこ","かきくけこ","kakikukeko@yahoo.co.jp")
                            .values(3,"さしすせそ","さしすせそ","sasisuseso@yahoo.co.jp")
                            .build();

        /**
         * ここでは更新と削除を毎回行っている。
         */
        @Before
        public void before(){
            //テストDB接続(Application.propertiesに設定されている情報呼び出し)
            Destination dest = new DataSourceDestination(dataSource);
            //実行対象
            Operation ops = Operations.sequenceOf(DELETE_ALL, INSERT);
            DbSetup dbSetup = new DbSetup(dest, ops);
            dbSetup.launch();
        }

        @Autowired
        MailAddressService service;


        /**
         * 取得テスト
         * テスト対象メソッド:getAll()
         * 想定値:3件
         * ok
         */
        @Test
        public void testgetAll1() {
            List<MailAddressData> list = service.getAll();
            assertThat(list.size(), is(3));
            }

        /**
         * 検索件数取得テスト
         * テスト対象メソッド:getAll()
         * 想定値:1,"あいうえお","あいうえお","aiueo@yahoo.co.jp"
         * 想定値:2,"かきくけこ","かきくけこ","kakikukeko@yahoo.co.jp"
         * 想定値:3,"さしすせそ","さしすせそ","sasisuseso@yahoo.co.jp"
         *
         *上でいれたデータが正常に入っているかのテスト
         *
         /

        @Test
        public void testgetAll2() {
            List<MailAddressData> list = service.getAll();
            assertThat(list.get(0).getId(),is(1));
            assertThat(list.get(0).getName(), is("あいうえお"));
            assertThat(list.get(0).getPseudonym(), is("あいうえお"));
            assertThat(list.get(0).getAddress(), is("aiueo@yahoo.co.jp"));

            assertThat(list.get(1).getId(), is("2"));
            assertThat(list.get(1).getName(), is("かきくけこ"));
            assertThat(list.get(1).getPseudonym(), is("かきくけこ"));
            assertThat(list.get(1).getAddress(), is("kakikukeko@yahoo.co.jp"));

            assertThat(list.get(2).getId(), is("3"));
            assertThat(list.get(2).getName(), is("さしすせそ"));
            assertThat(list.get(2).getPseudonym(), is("さしすせそ"));
            assertThat(list.get(2).getAddress(), is("sasisuseso@yahoo.co.jp"));

        }
エラー内容
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)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+1

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/10/21 15:00

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

    キャンセル

  • 2018/10/21 18:14

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

    キャンセル

  • 2018/10/21 18:31

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

    キャンセル

checkベストアンサー

0

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/10/21 22:16

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

    キャンセル

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

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

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

  • Spring Boot

    811questions

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

  • JUnit

    211questions

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