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}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。