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

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

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

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

Java

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

Spring Boot

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

Q&A

解決済

1回答

1968閲覧

【Mockito】MockオブジェクトのスタブでOptionalインスタンスを返す方法

uraniwa

総合スコア11

JUnit

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

Java

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

Spring Boot

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

0グッド

0クリップ

投稿2018/09/28 01:15

編集2018/09/28 02:04

JUnitの勉強をしています。

Service内で呼び出すRepositoryをMock化して実施しようと考えました。
repositoryメソッドの戻り値はOptionalとなり、スタブとして設定できずに困っています。
findById()の戻り値はOptionalのままにしたいです。
どのように実施したらよいでしょうか?

バージョンは下記の通りです。
Java8
SpringBoot2.0.5
JUnit4.12
Mockito2.15

テストコード

Java

1package com.example.membermanage; 2 3import static org.assertj.core.api.Assertions.assertThat; 4import static org.junit.Assert.assertThat; 5import static org.mockito.Mockito.times; 6import static org.mockito.Mockito.when; 7 8import java.util.Optional; 9 10import org.junit.Before; 11import org.junit.Test; 12import org.mockito.InjectMocks; 13import org.mockito.Mock; 14 15import com.example.membermanage.repositories.MemberRepository; 16 17public class MemberManageServiceTest { 18 19 private final static Long TEST_ID = 1L; 20 21 private Member member; 22 23 @Mock 24 private MemberRepository repository; 25 26 @InjectMocks 27 private MemberManageService service; 28 29 30 @Before 31 public void setup() { 32 MockitoAnnotations.initMocks(this); 33 this.member = new Member(); 34 this.member.setId(1); 35 this.member.setName("john"); 36 this.member.setDepartment("sales"); 37 this.member.setMail("john@doe.com"); 38 } 39 40 @Test 41 public void idセレクトで1件取得できたとき() throws Exception { 42 when(this.repository.findById(TEST_ID)).thenReturn(/* ここにOptional<Member>でMemberがsetできなくて困った */); 43 Member actual = service.findMemberById(TEST_ID); 44 assertThat(actual).isEqualTo(this.member); 45 } 46} 47

Service

Java

1package com.example.membermanage; 2 3import java.util.Optional; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Service; 7 8import com.example.membermanage.repositories.MemberRepository; 9 10@Service 11public class MemberManageService { 12 13 @Autowired 14 MemberRepository repository; 15 16 public Member findMemberById(long id) throws Exception { 17 18 Optional<Member> member = repository.findById(id); 19 if(member.isPresent()) { 20 return member.get(); 21 } else { 22 throw new Exception(); 23 } 24 } 25 26}

Repository

Java

1package com.example.membermanage.repositories; 2 3import java.util.Optional; 4 5import org.springframework.data.jpa.repository.JpaRepository; 6import org.springframework.stereotype.Repository; 7 8import com.example.membermanage.Member; 9 10@Repository 11public interface MemberRepository extends JpaRepository<Member, Long> { 12 13 public Optional<Member> findById(Long id); 14 15}

Entity

Java

1package com.example.membermanage; 2 3import javax.persistence.Column; 4import javax.persistence.Entity; 5import javax.persistence.GeneratedValue; 6import javax.persistence.GenerationType; 7import javax.persistence.Id; 8import javax.persistence.Table; 9import javax.validation.constraints.NotNull; 10 11@Entity 12@Table(name="member") 13public class Member { 14 15 @Id 16 @GeneratedValue(strategy = GenerationType.AUTO) 17 @Column 18 @NotNull 19 private long id; 20 21 @Column(length = 50, nullable = false) 22 private String name; 23 24 @Column(length = 50, nullable = true) 25 private String department; 26 27 @Column(length = 200, nullable = false) 28 private String mail; 29 30 31 public long getId() { 32 return id; 33 } 34 35 public void setId(long id) { 36 this.id = id; 37 } 38 39 public String getName() { 40 return name; 41 } 42 43 public void setName(String name) { 44 this.name = name; 45 } 46 47 public String getDepartment() { 48 return department; 49 } 50 51 public void setDepartment(String department) { 52 this.department = department; 53 } 54 55 public String getMail() { 56 return mail; 57 } 58 59 public void setMail(String mail) { 60 this.mail = mail; 61 } 62}

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

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

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

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

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

guest

回答1

0

自己解決

MockitoとかJUnitとか関係なく、単純にOptionalの使い方の問題でしたね・・・。恥ずかしい。。。
Optional.of(member);とかにしたらよさそうです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Optional.html

投稿2018/09/28 01:44

uraniwa

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問